DB2 SQL错误:SQL代码= -204,SQL状态=42704

qlfbtfca  于 2022-11-07  发布在  DB2
关注(0)|答案(5)|浏览(5397)

我在DB2中创建了名为“TestDB“的本地数据库,然后创建了名为“TestTable“的表。
我发现这个表被放在schema名称下是“yasmin“。
我正在尝试使用JDBC连接到DB2数据库,但遇到此异常

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

我尝试了许多解决方案在互联网上像设置模式,但不幸的是不工作.
这是我使用的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
          }
        }
kwvwclae

kwvwclae1#

正如@Mark Rotteveel所说,-204错误来自一个丢失的对象,但它的丢失原因与他所说的不同。
找不到它是因为您没有在它前面加上模式名称。您在上面说它在模式yasmin中,但是您正在连接db2admin,所以它正在尝试查找db2admin.TestTable

SELECT * FROM yasmin.TestTable

应该就是你要找的。
默认情况下,架构的搜索路径是当前连接用户的名称。

SELECT CURRENT SCHEMA FROM SYSIBM.SYSDUMMY1

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

biswetbf

biswetbf2#

错误SQLERROR -204, SQLSTATE 42704是一个缺少/未知的对象名,很可能是由于以下位置中缺少空格而导致的:

rs = stmt.executeQuery("select *from TestTable");

其中应包括:

rs = stmt.executeQuery("select * from TestTable");
uidvcgyl

uidvcgyl3#

问题是我在db2中创建的表的模式名为"yasmin"
我在JDBC连接中使用了用户名和密码"db2admin/db2admin"
因此它在这个模式“db2 admin”中搜索表
所以我需要将模式设置为"yasmin"
因此我在创建连接后添加了以下代码行

String schemaName="yasmin";
            if (schemaName != null && schemaName.length() != 0) {

            try {
                statement = connection.createStatement();
                statement.executeUpdate("set current sqlid = " + schemaName);
                System.out.println("The schema is set successfully.");
            } catch (SQLException exception) {
                exception.printStackTrace();

            }

并授予db2 admin在db2中该表上的所有特权
1-右键单击表选择权限
2-点击“添加用户”按钮
3-然后写入用户名“db2 admin”并单击“apply”按钮
4-然后选择您刚刚添加的用户,并单击“gtant all”按钮
现在他可以看到table了。
非常感谢@Mark Rotteveel和@bhamby的帮助。

xxhby3vn

xxhby3vn4#

如果在Spring中使用Hibernate进行连接,请在属性行中使用以下命令

<property name="url" value="jdbc:db2://<ip>:<port>/<database>:currentSchema=<currentSchema>;" />
i7uq4tfw

i7uq4tfw5#

其他的办法只是创建一个ALIAS,就像这样:

CREATE ALIAS USER1.YOURTABLE FOR TABLE USER2.YOURTABLE;

相关问题