Java db2的例外初始化错误

Java db2的例外初始化错误,java,jdbc,connection,db2,Java,Jdbc,Connection,Db2,我有最简单的JDBC程序从DB2(或其他配置的)实例读取数据。当我试图从Eclipse或命令行运行它时,连接失败,抛出一个SQLexception Class.forName(jdbcDriverClassName).newInstance(); 使用com.ibm.db2.jcc.DB2Driver,class.forName失败。我将Eclipse配置为指向DBVisualizer使用的同一个驱动程序(作为启动库和项目)。该程序使用与DBVisualizer相同的连接字符串。DBVisu

我有最简单的JDBC程序从DB2(或其他配置的)实例读取数据。当我试图从Eclipse或命令行运行它时,连接失败,抛出一个SQLexception

 Class.forName(jdbcDriverClassName).newInstance();
使用
com.ibm.db2.jcc.DB2Driver
,class.forName失败。我将Eclipse配置为指向DBVisualizer使用的同一个驱动程序(作为启动库和项目)。该程序使用与DBVisualizer相同的连接字符串。DBVisualizer没有任何问题

带完整堆栈的输出(注意驱动程序的FQN不为空):

V--!空驱动程序名--V
正在尝试加载com.ibm.db2.jcc.DB2Driver
错误:java.lang.ExceptionInInitializerError:null
java.lang.ExceptionInInitializeError
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:169)
位于com.ibm.db2.jcc.DB2Driver.class$(DB2Driver.java:58)
位于com.ibm.db2.jcc.DB2Driver(DB2Driver.java:61)
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:169)
位于com.onlineTailer.ecomm.dumporder.dumporder.main(dumporder.java:79)
原因:java.lang.NullPointerException
com.ibm.db2.jcc.am.ib.i(ib.java:490)
com.ibm.db2.jcc.am.ib.(ib.java:420)
... 还有7个
我还尝试将.newInstance()添加到类.forName()的末尾,它将继续执行相同的行为


感谢大家的时间和投入

您也需要在jvm中加载驱动程序,使用
Class.forName()
您需要加载以下驱动程序

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); 

参考

    • “没有合适的驱动程序”通常意味着连接URL对于您使用的JAR不正确

      另见:

      更新根据您的问题更新,
      newInstance()
      成功了。然而,这导致了一个新问题:

      原因:java.lang.NullPointerException
      com.ibm.db2.jcc.am.ib.i(ib.java:490)
      com.ibm.db2.jcc.am.ib.(ib.java:420)
      

      这是DB2JDBC驱动程序本身的另一个bug。升级它。

      谢谢,在调用getConnection之前我有一行代码:private static final String jdbcdrivercassname=“com.ibm.db2.jcc.DB2Driver”。。。Class.forName(jdbcDriverClassName);打印整个堆栈跟踪。该错误消息所包含的信息比可用信息少。因此,它现在应该可以正常工作了,或者仍然存在任何问题?>您需要在类路径中添加toack。stackoverflow刚刚吐了我的编辑。我以后必须更新。@BalusC:还有第三个原因:注册的驱动程序被错误的类加载器加载。@axtavt:nice one:)那将是一个糟糕的类加载器层次结构。我只是不认为OP运行的Java EE应用程序有多个类加载器。@axtavt:谢谢。我想也许我遇到了第三个原因。驱动程序jar现在位于系统类路径中,位于每个可能的类路径中,并且错误仍然发生。我发帖的原因是因为我过去在jdbc编程方面做了很多工作,为什么它对DBVis有效而对我无效,这让我挠头。@Alexx:所以,事后调用
      newInstance()
      并不能解决这个问题?您使用的DB2JDBC驱动程序版本到底是什么?@BalusC:遗憾的是,它没有。(我在另一篇博文中也看到了这一点——也许是你(-:)我也尝试过在CP中包含许可证JAR,以防这是一个虚假的错误。(db2jcc_license_cu.JAR)我不确定IBM分发的两个JAR之间的区别以及DBVis正在使用的内容。
      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); 
      
      SQLException: No suitable driver found for jdbc:db2:...
      Class.forName("com.ibm.db2.jcc.DB2Driver").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)