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

标签 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; 
}

并尝试在普通类型 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);

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

关于java - 在 JDBC 中设置 DB2 DataSource 中的当前模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35995545/

相关文章:

mysql - 选择薪水高于其部门平均水平的每位员工

java - SQL 类型说明符

java - 使用 Apache Lucene 索引大文件时如何解决内存不足错误?

java - 无法从 Eclipse 中的客户端或restclient-ui 使用外部 RestFul Web 服务

java - StringBuilder,消失的引号

sql - 登录失败。用户 'IIS APPPOOL\ASP.NET v4.0' 登录失败

sql - 性能 - Int vs Char(3)

java - 如何使用 JDBC 从 Java 连接到 Access 数据库?

Java Class.forName() 不起作用,从属性文件加载类字符串

java - 我如何在 [Java/Scala?] 代码中看到 Scala 编译器重写了原始 Scala 代码