jsp连接db2 出现No suitable driver

TPcoder 2008-09-12 04:24:17
我使用的struts 2.0
db2 版本是7.2
登录页面提交时出现下面的错误信息:

....
....
....
Caused by: org.hibernate.exception.JDBCConnectionException: Cannot open connection
....
....
....
Caused by: java.sql.SQLException: No suitable driver
...全文
627 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
TPcoder 2008-09-16
  • 打赏
  • 举报
回复
TOMCAT 5.5.27
huoyin 2008-09-13
  • 打赏
  • 举报
回复
应用服务器是什么?
liyan93834183 2008-09-12
  • 打赏
  • 举报
回复
转载:
使用JDBC 2 driver在Tomcat中连接DB2 V7.2时,如果你的驱动包和Connection Pool包(假设有的话,例如dbcp)放在web app/WEB-INF/lib时,下面的情况们会出现莫名其妙的"No suitable driver"异常:
a. 两个web app的话,在第一个使用Connection很正常,但是在第二个web app中使用的话就会有异常
b. 一个web app被tomcat重新装载后

异常信息为:
Cannot create JDBC driver of class 'COM.ibm.db2.jdbc.app.DB2Driver' for connect URL 'jdbc:db2:xxx'.
Caused by: java.sql.SQLException: No suitable driver

原因,
a. 不论是直接获取,还是通过DataSource来获取数据库连接,首次获取物理连接的方式是首先通过Class.forName(),接着通过DriverManager.getConnection()或者.getDriver()
b. Class.forName()是使用当前class的ClassLoader来装载COM.ibm.db2.jdbc.app.DB2Driver这个类,DB2Driver在静态初始化的时候会创建一个DB2Driver实例
DB2Driver在实例化时发现如果db2jdbc.dll被其他ClassLoader装载,就会抛出java.lang.UnsatisfiedLinkError: Native Library C:\Program Files\SQLLIB\bin\db2jdbc.dll already loaded in another classloader,
这是最主要的错误原因,导致该DB2Driver不能注册到DriverManager中。DB2Driver不会抛出这个异常,而只是在DriverManager中打印出来,console中是看不到的。
更重要的是,虽然DB2Driver被Web ClassLoader装载到JVM中,但是并没有注册到DriverManager,所以DriverManager只有一个DB2Driver,就是第一个WebClassLoader装载的Driver。
c. 在DriverManager的Connection getConnection(String url, java.util.Properties info, ClassLoader callerCL)方法和Driver getDriver(String url)方法中,
DriverManager要保证已经注册的driver的ClassLoader和当前调用这个两个方法的ClassLoader一致,否则抛出SQLException "No suitable driver"。
(两个方法都是调用DriverManager的native方法ClassLoader getCallerClassLoader()获取调用者的ClassLoader,第一个方法的入参callerCL如果是null,则使用Thread.currentThread().getContextClassLoader().
DriverManager是由Bootstrap ClassLoader装载,所以在tomcat进程中是singleton。)



所以,同样的情况适用于所有的Application Server,而非只Tomcat。


解决方法:
将jdbc驱动包放在%CATALINA_HOME%/common/lib中,使得该驱动不会在各个web app共存,而是分享。(因为Tomcat的Common ClassLoader是会被各个web app分享的,详见tomcat文档)



要注意的问题:
a. 由于DriverManager在tomcat中是singleton,它保存了各个Driver,包括其class和ClassLoader。这样的话,当web app重启时,DriverManager并不会deRegister相关的Driver,
从而导致内存泄漏。当ClassLoader装载的Class足够多时,泄漏的内存会比较大。一个简单的解决方案是把Driver的jar包都放在%CATALINA_HOME%/common/lib下。
内容概要:本文档详细介绍了“南方数码房地一体内外业软件”的操作流程,涵盖从数据准备、外业调查、内外业数据对接,到内业数据处理与成果输出的完整工作链。主要包括调查底图制作(支持DWG、MDB、SHP及倾斜三维模型等多种数据源)、导出外业IDB工程文件、平板端外业调查(宗地与房屋核实、电子签章表确认、照片导出)、内外业数据对接(DB与照片数据导入),以及内业的宗地信息完善、界址属性设置、自然幢生成、房屋面积计算、户属性录入,并最终输出宗地图、房产分户图、各类报表及MDB数据库等成果。; 适合人群:从事农村房地一体权籍调查的测绘、不动产登记及相关地理信息行业的内业处理人员、外业调查员和技术管理人员,需具备基础GIS或CAD操作能力; 使用场景及目标:①指导用户系统完成从原始数据到不动产登记成果的全流程作业;②实现外业调查数据高效采集与内业自动化处理衔接,提升房地一体确权登记工作的标准化与效率; 阅读建议:建议结合实际项目按章节顺序操作,重点关注数据格式转换、IDB工程交互逻辑及成果图输出设置,配合软件界面逐步实践,确保各环节数据完整性与准确性。
内容概要:本文围绕“面向高精度电流控制的PMSM多参数PSO辨识模型研究”,结合Simulink仿真实现,系统探讨了在高性能电机控制背景下,如何利用粒子群优化算法(PSO)对永磁同步电机(PMSM)电流环的关键参数进行多参数协同辨识。研究通过建立PMSM的精确动态数学模型,设计基于PSO的参数辨识框架,实现了对电机电感、电阻、反电动势常数等核心参数的高效在线或离线辨识,有效提升了电流控制的精度与系统鲁棒性。文中详细阐述了PSO算法的实现机制,包括适应度函数构造、参数编码策略与收敛判据,并在Simulink中构建了完整的联合仿真平台,通过大量仿真实验验证了该方法相较于传统辨识技术在准确性、稳定性和适应性方面的显著优势,为高动态性能电机驱动系统的参数获取提供了可靠的技术路径。; 适合人群:自动化、电气工程、控制科学与工程等相关专业的研究生、科研人员及从事高性能电机驱动系统开发的工程师。; 使用场景及目标:①应用于高端制造、新能源汽车、航空航天等领域中对电流控制精度要求极高的PMSM控制系统开发;②作为智能优化算法(如PSO)在电机参数辨识领域应用的典型案例,服务于教学演示与学术研究;③为后续开展自适应控制、智能容错控制及多物理场耦合建模等前沿课题提供坚实的参数辨识基础和技术参考。; 阅读建议:读者应具备扎实的电机控制理论基础(如FOC矢量控制、现代控制理论)以及熟练的MATLAB/Simulink仿真能力,建议在学习过程中结合文中的仿真模型,动手复现PSO参数辨识的完整流程,深入分析算法参数设置对辨识结果的影响,从而全面掌握其工程应用精髓。

5,888

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧