DB2 SQL 错误:SQLCODE=-204,SQLSTATE=42704
Posted
技术标签:
【中文标题】DB2 SQL 错误:SQLCODE=-204,SQLSTATE=42704【英文标题】:DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704 【发布时间】:2014-01-22 01:07:08 【问题描述】:我在 DB2 中创建了名为“TestDB
”的本地数据库,然后创建了名为“TestTable
”的表。
我发现该表放在模式名称下是“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
我在互联网上尝试了很多解决方案 Like 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
【问题讨论】:
请您帮忙。该问题被查看了 10 次,但没有答案。如果问题不明确,请告诉我应该添加哪些附加信息。 【参考方案1】:错误SQLERROR -204, SQLSTATE 42704 是缺少/未知的对象名,很可能是由于以下位置缺少空格引起的:
rs = stmt.executeQuery("select *from TestTable");
应该是:
rs = stmt.executeQuery("select * from TestTable");
【讨论】:
对不起,不知道你说的是哪个空间? @Yasmin 那么您很可能没有名为TestTable
的表,或者需要将其引用以区分大小写。【参考方案2】:
正如@Mark Rotteveel 所说,-204
错误来自丢失的对象,但由于他所说的其他原因而丢失。
没有找到它,因为您没有在它前面加上架构名称。您在上面说过它在架构yasmin
中,但您正在与db2admin
连接,因此它正在尝试寻找db2admin.TestTable
。
SELECT * FROM yasmin.TestTable
应该是你要找的。
默认情况下,模式的搜索路径是当前连接用户的名称。你可以看到它在使用什么
SELECT CURRENT SCHEMA FROM SYSIBM.SYSDUMMY1
如果要更改它,可以使用SET SCHEMA 命令更改搜索路径,但通常在查询中包含架构名称会更容易。
【讨论】:
不幸的是,我之前使用过这个查询,但也不起作用。我尝试使用查询将 db2 中的表模式设置为“db2admin”,并使用查询检查当前模式。它改变了。之后,如果我浏览表模式,其相同的“yasmin”不会改变。【参考方案3】:问题是我在 db2 中创建的表的模式名称为 "yasmin"
我在 JDBC 连接中使用了用户名和密码 "db2admin/db2admin"
因此它在此模式“db2admin”中搜索表
所以我需要将架构设置为"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();
并授予 db2admin db2 中此表的所有特权
1-右键点击表格选择权限 2-单击“添加用户”按钮 3-然后输入用户名“db2admin”并单击“应用”按钮 4-然后选择您刚刚添加的用户并单击“gtant all”按钮
现在他可以看到桌子了。
非常感谢@Mark Rotteveel 和@bhamby 的帮助。
【讨论】:
【参考方案4】:如果您在 Spring 中使用 Hibernate 进行连接,请在属性行中使用以下内容
<property name="url" value="jdbc:db2://<ip>:<port>/<database>:currentSchema=<currentSchema>;" />
【讨论】:
这个对我有用【参考方案5】:其他方式就是创建一个别名,像这样:
CREATE ALIAS USER1.YOURTABLE FOR TABLE USER2.YOURTABLE;
【讨论】:
以上是关于DB2 SQL 错误:SQLCODE=-204,SQLSTATE=42704的主要内容,如果未能解决你的问题,请参考以下文章
为什么我在执行以下查询时遇到错误SQLCODE = -204,SQLSTATE = 42704,DRIVER = 4.18.60
websphere容器启动jdbc连接异常,db2报Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=MARKET.ALL_SEQUENCES, DRIVER
SQL 查询的准备语句,错误 DB2 SQL 错误:SQLCODE=-206,SQLSTATE=42703
DB2 SQL 错误(SQLCODE:-964,SQLSTATE:57011)处理方法
原因:com.ibm.db2.jcc.am.SqlSyntaxErrorException:DB2 SQL 错误:SQLCODE=-440,SQLSTATE=42884