我在DB2中创建了名为“TestDB”的本地数据库,然后创建了名为“TestTable”的表。
我发现该表放在架构名称下为“yasmin”。
我正在尝试使用DB2连接到JDBC数据库,但出现此异常

    R SQLException information
[1/4/14 11:32:59:289 EST] 0000004d SystemErr     R Error msg: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=DB2ADMIN.TESTTABLE, DRIVER=3.61.86
[1/4/14 11:32:59:290 EST] 0000004d SystemErr     R SQLSTATE: 42704
[1/4/14 11:32:59:290 EST] 0000004d SystemErr     R Error code: -204
[1/4/14 11:32:59:290 EST] 0000004d SystemErr     R com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=DB2ADMIN.TESTTABLE, DRIVER=3.61.86

我在Internet上尝试了很多解决方案,例如set模式,但不幸的是,它不起作用。

这是我使用的JDBC代码
 String urlPrefix = "jdbc:db2:";
        String url;
        String user;
        String password;
        String empNo;
        Connection con;
        Statement stmt;
        ResultSet rs;

        url = urlPrefix + "//127.0.0.1:50000/TestDB";
        user = "db2admin";
        password = "db2admin";
        try
        {
          // Load the driver
          Class.forName("com.ibm.db2.jcc.DB2Driver");
          System.out.println("**** Loaded the JDBC driver");

          // Create the connection using the IBM Data Server Driver for JDBC and SQLJ
          con = DriverManager.getConnection (url, user, password);
          // Commit changes manually

          con.setAutoCommit(false);
          System.out.println("**** Created a JDBC connection to the data source");
          stmt = con.createStatement();   con.createStatement();
          System.out.println("**** Created JDBC Statement object");
          // Execute a query and generate a ResultSet instance

          rs = stmt.executeQuery("select *from TestTable");
          System.out.println("**** Created JDBC ResultSet object");
        }

        catch (ClassNotFoundException e)
        {
          System.err.println("Could not load JDBC driver");
          System.out.println("Exception: " + e);
          e.printStackTrace();
        }

        catch(SQLException ex)
        {
          System.err.println("SQLException information");
          while(ex!=null) {
            System.err.println ("Error msg: " + ex.getMessage());
            System.err.println ("SQLSTATE: " + ex.getSQLState());
            System.err.println ("Error code: " + ex.getErrorCode());
            ex.printStackTrace();
            ex = ex.getNextException(); // For drivers that support chained exceptions
          }
        }

最佳答案

就像@Mark Rotteveel所说的那样,-204错误是由丢失的对象引起的,但由于他所说的原因而丢失了。

未找到它,因为您没有为它添加架构名称前缀。上面您说过,它位于yasmin模式中,但是您正在与db2admin连接,因此它正在尝试查找db2admin.TestTable

SELECT * FROM yasmin.TestTable

应该是您要寻找的。

默认情况下,架构的搜索路径是当前连接用户的名称。您可以看到它在使用什么
SELECT CURRENT SCHEMA FROM SYSIBM.SYSDUMMY1

如果要更改它,可以使用SET SCHEMA命令更改搜索路径,但是通常只在查询中包含模式名称会更容易。

08-06 22:00