db2的ExceptionInInitializerError

时间:2011-05-24 17:30:06

标签: java jdbc connection db2

我有最简单的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()的末尾,并继续执行相同的行为。

感谢大家的时间和投入!

3 个答案:

答案 0 :(得分:4)

SQLException: No suitable driver found for jdbc:db2:...

此例外只有两个可能的原因:

  1. DriverManager未知JDBC驱动程序。即JDBC驱动程序尚未通过DriverManager#registerDriver()正确注册。

  2. 对于使用DriverManager注册的任何JDBC驱动程序,JDBC URL都是未知的。即对于任何已注册的驱动程序,Driver#acceptsURL()尚未返回true

  3. 您的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不正确。