【问题标题】:Setting up current schema in DB2 DataSource in JDBC在 JDBC 中的 DB2 DataSource 中设置当前模式
【发布时间】:2016-06-29 23:08:07
【问题描述】:

我已经写了一个方法来获取一个用于 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 错误:SQLCODE:-204,SQLSTATE:42704,SQLERRMC:TESTUSER.EMPLOYEE

现在我已经通过下面的语句在数据源中设置了架构

dataSource.setCurrentSchema("DB2TEST");

但它似乎不是以这种方式设置架构。 我想了解我缺少什么。

----更新----

如果我使用 DB2SimpleDataSource 而不是 DB2DataSOurce 似乎。 setCurrentSchema 工作得很好。 8.1版本的驱动好像有问题

顺便说一句,我已经知道我可以通过执行语句 SET 来设置架构 架构如下

stmnt.executeUpdate("SET SCHEMA DB2TEST");

以这种方式设置架构似乎不太合适。 此外,在从数据源获取的 Connection 对象上设置架构也不是一个选项,因为我需要将 DataSource 的实例传递给我的方法。

【问题讨论】:

  • 在获得连接后尝试在连接上发出setSchema(),而不是在数据源上发出。
  • 我需要在数据源上做。我正在尝试测试我的代码,我需要传递数据源对象。也没有用于连接的 setSchema。
  • 嗯,这很好。我解决了 setSchema 部分。项目中使用的 JRE 似乎是 WebSphere JRE,它没有用于连接的 setSchema。
  • 通过 setCUrrentSchema 设置时 dataSource 没有采用模式,这很奇怪

标签: java sql jdbc db2


【解决方案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

【讨论】:

  • 奇怪的是,我正在使用的 DB2 驱动程序 jar 并没有为我提供这个方法调用。
  • 这里我们使用连接字符串并附加currentSchema=MYSCHEM1;currentFunctionPath=MYSCHEM1;
  • 文档中的注释“以下方法仅为 IBM® Data Server Driver for JDBC and SQLJ 定义”。似乎这不适用于常规 db2jcc.jar
  • 只是为了澄清@Stavr00 的评论,附加一个冒号,这样你最终会得到类似:jdbc:db2://myserver:myport/mydb:currentSchema=myschema
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 2010-11-10
  • 1970-01-01
  • 2017-08-23
  • 2014-09-23
  • 2018-10-03
  • 1970-01-01
相关资源
最近更新 更多