与 DB2 和 jdbc 的连接?

Posted

技术标签:

【中文标题】与 DB2 和 jdbc 的连接?【英文标题】:Connection with DB2 and jdbc? 【发布时间】:2014-08-18 09:16:59 【问题描述】:

我正在尝试使用以下代码连接 DB2,但出现以下异常

com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=ROOT.EMPLOYEE, DRIVER=3.63.123
    at com.ibm.db2.jcc.am.fd.a(fd.java:679)
    at com.ibm.db2.jcc.am.fd.a(fd.java:60)
    at com.ibm.db2.jcc.am.fd.a(fd.java:127)
    at com.ibm.db2.jcc.am.ho.c(ho.java:2644)
    at com.ibm.db2.jcc.am.ho.d(ho.java:2632)
    at com.ibm.db2.jcc.am.ho.a(ho.java:2097)
    at com.ibm.db2.jcc.t4.cb.h(cb.java:141)
    at com.ibm.db2.jcc.t4.cb.b(cb.java:41)
    at com.ibm.db2.jcc.t4.q.a(q.java:32)
    at com.ibm.db2.jcc.t4.sb.i(sb.java:135)
    at com.ibm.db2.jcc.am.ho.gb(ho.java:2066)
    at com.ibm.db2.jcc.am.ho.a(ho.java:3120)
    at com.ibm.db2.jcc.am.ho.a(ho.java:681)
    at com.ibm.db2.jcc.am.ho.executeQuery(ho.java:665)

代码:

      Class.forName("com.ibm.db2.jcc.DB2Driver");                             
      System.out.println("**** Loaded the JDBC driver");

        String url = bundle.getString("db2.url");  
        String user = bundle.getString("db2.username");  
        String password = bundle.getString("db2.password");

      // Create the connection using the IBM Data Server Driver for JDBC and SQLJ
      Connection con = DriverManager.getConnection (url, user, password);                
      // Commit changes manually
      con.setAutoCommit(false);
      System.out.println("**** Created a JDBC connection to the data source");

      // Create the Statement
      Statement stmt = con.createStatement();                                           
      System.out.println("**** Created JDBC Statement object");

      // Execute a query and generate a ResultSet instance
      ResultSet rs = stmt.executeQuery("SELECT EMPNO FROM  EMPLOYEE");                   
      System.out.println("**** Created JDBC ResultSet object");

      String empNo;   

      // Print all of the employee numbers to standard output device
      while (rs.next()) 
        empNo = rs.getString(1);
        System.out.println("Employee number = " + empNo);
      
      System.out.println("**** Fetched all rows from JDBC ResultSet");
      // Close the ResultSet
      rs.close();
      System.out.println("**** Closed JDBC ResultSet");

      // Close the Statement
      stmt.close();
      System.out.println("**** Closed JDBC Statement");
              if(con!=null)System.out.println("Connection successfull with DB2");

【问题讨论】:

【参考方案1】:

问题不在于连接。您需要了解如何阅读 DB2 错误消息。

在这部分解释问题:

SQLCODE=-204, SQLSTATE=42704, SQLERRMC=ROOT.EMPLOYEE

In 表示你已经建立了连接,在寻找对象ROOT.EMPLOYEE 时,db2 没有找到任何东西。错误是204,可以解释为SQL0204。您可以在 db2clp 或 Internet 中寻找答案。

您的问题似乎是您以 root 身份连接到数据库,并且隐式模式“ROOT”不包含 EMPLOYEE 表。确保您使用的是正确的架构。

【讨论】:

并且 OP 不应该以 root 的身份连接到数据库。

以上是关于与 DB2 和 jdbc 的连接?的主要内容,如果未能解决你的问题,请参考以下文章

与 db2 jdbc 的连接错误

与 DB2 for i 的 JDBC 连接 - 只有单一模式的表可用

jsp用jdbc连接db2数据库的方法

JDBC DB2 无法连接(SQLSTATE=08S01)

如何给druid指定db2数据库jdbc驱动类

DB2数据库连接问题