我在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
}
}
5条答案
按热度按时间kwvwclae1#
正如@Mark Rotteveel所说,
-204
错误来自一个丢失的对象,但它的丢失原因与他所说的不同。找不到它是因为您没有在它前面加上模式名称。您在上面说它在模式
yasmin
中,但是您正在连接db2admin
,所以它正在尝试查找db2admin.TestTable
。应该就是你要找的。
默认情况下,架构的搜索路径是当前连接用户的名称。
如果要更改它,可以使用SET SCHEMA命令来更改搜索路径,但通常在查询中只包含模式名称会更容易。
biswetbf2#
错误SQLERROR -204, SQLSTATE 42704是一个缺少/未知的对象名,很可能是由于以下位置中缺少空格而导致的:
其中应包括:
uidvcgyl3#
问题是我在db2中创建的表的模式名为
"yasmin"
我在JDBC连接中使用了用户名和密码
"db2admin/db2admin"
因此它在这个模式“db2 admin”中搜索表
所以我需要将模式设置为
"yasmin"
因此我在创建连接后添加了以下代码行
并授予db2 admin在db2中该表上的所有特权
1-右键单击表选择权限
2-点击“添加用户”按钮
3-然后写入用户名“db2 admin”并单击“apply”按钮
4-然后选择您刚刚添加的用户,并单击“gtant all”按钮
现在他可以看到table了。
非常感谢@Mark Rotteveel和@bhamby的帮助。
xxhby3vn4#
如果在Spring中使用Hibernate进行连接,请在属性行中使用以下命令
i7uq4tfw5#
其他的办法只是创建一个ALIAS,就像这样: