DB2 SQL 错误:SQLCODE=-204,SQLSTATE=42704

新手上路,请多包涵

我在 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

我在互联网上尝试了很多解决方案,比如 set schema,但不幸的是没有用。

这是我使用的 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
          }
        }

原文由 Yasmin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.4k
1 个回答

正如@Mark Rotteveel 所说, -204 错误来自一个丢失的对象,但它丢失的原因与他所说的不同。

找不到它是因为您没有在它前面加上架构名称。你在上面说过它在模式中 yasmin ,但你正在连接 db2admin ,所以它试图寻找 db2admin.TestTable

 SELECT * FROM yasmin.TestTable

应该是你要找的。

默认情况下,架构的搜索路径是当前连接用户的名称。你可以看到它正在使用什么

SELECT CURRENT SCHEMA FROM SYSIBM.SYSDUMMY1

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

原文由 bhamby 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题