我编写了一个方法来获取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;
}
并尝试在plain tyle 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错误:SQLCODE:-204,SQLSTATE:42704,SQLERRMC:TESTUSER.EMPLOYEE
现在我已经通过下面的语句
在数据源中设置了模式dataSource.setCurrentSchema("DB2TEST");
但似乎没有以这种方式设置架构。 我想了解我所缺少的内容。
----更新----
似乎我使用DB2SimpleDataSource而不是DB2DataSOurce。 setCurrentSchema工作正常。驱动程序版本8.1中似乎存在问题
BTW我已经知道我可以通过执行语句SET来设置模式 架构如下
stmnt.executeUpdate("SET SCHEMA DB2TEST");
以这种方式设置架构似乎不太合适。 同时在数据源提取的Connection对象上设置模式不是一个选项,因为我需要将DataSource的实例传递给我的方法。
答案 0 :(得分:1)
您必须设置DB2特殊寄存器:
Properties prop = new Properties();
prop.put ("CURRENT SCHEMA", "DB2TEST");
dataSource.setSpecialRegisters(prop);