在JDBC中的DB2 DataSource中设置当前模式

时间:2016-03-14 18:43:41

标签: java sql jdbc db2

我编写了一个方法来获取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的实例传递给我的方法。

1 个答案:

答案 0 :(得分:1)

您必须设置DB2特殊寄存器:

Properties prop = new Properties();
prop.put ("CURRENT SCHEMA", "DB2TEST");
dataSource.setSpecialRegisters(prop);

来源:https://www.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.apdv.java.doc/src/tpc/imjcc_rjv00016.html