首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL错误: SQLCODE=-204,SQLSTATE=42704

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

Stack Overflow用户
提问于 2014-01-04 17:38:59
回答 5查看 104.6K关注 0票数 11

我在DB2中创建了名为"TestDB“的本地数据库,然后创建了名为"TestTable”的表。

我发现这个表被放在模式名为"yasmin“的目录下。

我正在尝试使用JDBC连接到DB2数据库,但得到了以下异常

代码语言:javascript
运行
复制
    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代码

代码语言:javascript
运行
复制
 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
          }
        }
EN

回答 5

Stack Overflow用户

发布于 2014-01-05 03:52:00

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

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

代码语言:javascript
运行
复制
SELECT * FROM yasmin.TestTable

应该就是你要找的东西。

默认情况下,模式的搜索路径是当前连接用户的名称。您可以看到它使用的是什么

代码语言:javascript
运行
复制
SELECT CURRENT SCHEMA FROM SYSIBM.SYSDUMMY1

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

票数 15
EN

Stack Overflow用户

发布于 2014-01-04 19:05:50

错误SQLERROR -204, SQLSTATE 42704是缺少/未知的对象名,很可能是由于以下位置缺少空格造成的:

代码语言:javascript
运行
复制
rs = stmt.executeQuery("select *from TestTable");

这应该是:

代码语言:javascript
运行
复制
rs = stmt.executeQuery("select * from TestTable");
票数 3
EN

Stack Overflow用户

发布于 2014-01-06 04:29:48

问题是我在db2中创建的表具有模式名称"yasmin"

我在JDBC连接中使用了用户名和密码"db2admin/db2admin"

因此,它在模式"db2admin“中搜索表

因此,我需要将模式设置为"yasmin"

因此,我在创建连接后添加了以下几行代码

代码语言:javascript
运行
复制
            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();

            }

并授予db2admin对db2中此表的所有权限

1-右键单击表,选择[特权

2-点击"Add user“按钮

3-然后写下用户名"db2admin“并点击"apply”按钮

4-然后选择您刚添加的用户并单击“>全部”按钮

现在他可以看到桌子了。

非常感谢@Mark Rotteveel和@bhamby的帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20919298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档