我编写了一个方法来获取用于 jdbc 连接和查询执行的 DB2 数据源实例
public static DataSource getDB2DataSource() {
String [] db2Details= getDB2Details();
DB2DataSource dataSource = new DB2DataSource();
//DB2SimpleDataSource dataSource = new DB2SimpleDataSource ();
dataSource.setUser("TESTUSER");
dataSource.setPassword("TESTPASSWD");
dataSource.setServerName("localhost");
dataSource.setDatabaseName("TESTDB");
dataSource.setPortNumber(50000 ); //
dataSource.setCurrentSchema("DB2TEST");
dataSource.setDriverType(4);
return dataSource;
}
并尝试在普通类型 jdbc 中执行 SQL 查询
Connection conn = dbSource.getConnection();
String qryString = "SELECT NAME FROM EMPLOYEE where ID = 4 FOR FETCH ONLY WITH UR";
Statement stmnt = conn.createStatement();
ResultSet rSet = stmnt.executeQuery(qryString);
while (rSet.next() )
{
System.out.println ("ID : " + rSet.getString("NAME"));
}
执行此操作时出现错误
: DB2 SQL error: SQLCODE: -204, SQLSTATE: 42704, SQLERRMC: TESTUSER.EMPLOYEE
现在我已经通过下面的语句在数据源中设置了架构
dataSource.setCurrentSchema("DB2TEST");
但它似乎没有以这种方式设置架构。 我想了解我缺少什么。
---- 更新 ----
It seems if I use DB2SimpleDataSource instead of DB2DataSOurce. setCurrentSchema works just fine. There seems to be a problem in driver version 8.1
BTW I already know I can set the schema by executing statement SET schema as below
stmnt.executeUpdate("SET SCHEMA DB2TEST");
以这种方式设置架构似乎不太合适。 另外,在从数据源获取的 Connection 对象上设置架构也不是一个选项,因为我需要将 DataSource 的实例传递给我的方法。
最佳答案
您必须设置 DB2 特殊寄存器:
Properties prop = new Properties();
prop.put ("CURRENT SCHEMA", "DB2TEST");
dataSource.setSpecialRegisters(prop);
关于java - 在 JDBC 中设置 DB2 DataSource 中的当前模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35995545/