我有最简单的JDBC程序来从DB2(或其他已配置的)实例读取数据。当我尝试从Eclipse OR或从命令行运行它时,连接失败,抛出SQLexception
Class.forName(jdbcDriverClassName).newInstance();
使用com.ibm.db2.jcc.DB2Driver
,class.forName失败。我将Eclipse配置为指向DBVisualizer使用的相同驱动程序(作为引导库和项目)。该程序使用DBVisualizer使用的相同连接字符串。 DBVisualizer没有任何问题。
Ouptut w /满堆栈(注意驱动程序的FQN不为空):
V-- !null driver name --V
Attempting to load com.ibm.db2.jcc.DB2Driver
ERROR:java.lang.ExceptionInInitializerError: null
java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at com.ibm.db2.jcc.DB2Driver.class$(DB2Driver.java:58)
at com.ibm.db2.jcc.DB2Driver.<clinit>(DB2Driver.java:61)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at com.onlineretailer.ecomm.dumporder.DumpOrder.main(DumpOrder.java:79)
Caused by: java.lang.NullPointerException
at com.ibm.db2.jcc.am.ib.i(ib.java:490)
at com.ibm.db2.jcc.am.ib.<clinit>(ib.java:420)
... 7 more
我还尝试将.newInstance()添加到class.forName()的末尾,并继续执行相同的行为。
感谢大家的时间和投入!
答案 0 :(得分:4)
SQLException: No suitable driver found for jdbc:db2:...
此例外只有两个可能的原因:
DriverManager
未知JDBC驱动程序。即JDBC驱动程序尚未通过DriverManager#registerDriver()
正确注册。
对于使用DriverManager
注册的任何JDBC驱动程序,JDBC URL都是未知的。即对于任何已注册的驱动程序,Driver#acceptsURL()
尚未返回true
。
您的JDBC驱动程序类名称非常好。您的JDBC URL非常好。
设计良好的 JDBC驱动程序在DriverManager
初始化程序块中使用static {}
注册自身,该Class#forName()
在Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
执行。但是,旧版本的IBM DB2 JDBC驱动程序会在构造函数中注册自身。对于那些破碎的司机,你也需要在之后拨打newInstance()
。
newInstance()
更新根据您的问题更新,Caused by: java.lang.NullPointerException
at com.ibm.db2.jcc.am.ib.i(ib.java:490)
at com.ibm.db2.jcc.am.ib.<clinit>(ib.java:420)
确实。但是它会导致 new 问题:
{{1}}
原来是DB2 JDBC Driver本身的另一个错误。升级它。
答案 1 :(得分:1)
您需要使用Class.forName()
在jvm中加载驱动程序
您需要加载以下驱动程序
com.ibm.db2.jcc.DB2Driver
以下是它的完整外观
String databaseURL = "jdbc:derby:net://localhost:1527/sample";
// Load DB2 Driver for JDBC class
Class.forName("com.ibm.db2.jcc.DB2Driver");
// Set user and password properties
Properties properties = new Properties();
properties.put("user", "APP");
properties.put("password", "APP");
properties.put("retreiveMessagesFromServerOnGetMessage", "true");
// Get a connection
Connection conn = DriverManager.getConnection(databaseURL, properties);
<强>参考强>
答案 2 :(得分:0)
“没有合适的驱动程序”通常表示您正在使用的JAR的连接URL不正确。