使用 Data Direct DB2 JDBC 驱动程序更新/插入未记录表的查询

Posted

技术标签:

【中文标题】使用 Data Direct DB2 JDBC 驱动程序更新/插入未记录表的查询【英文标题】:Update/Insert queries with Data Direct DB2 JDBC driver for tables which are not journalled 【发布时间】:2016-12-01 09:45:09 【问题描述】:

我在我的应用程序中使用了 IBM DB2 iSeries 数据库。我已经通过node.js中的db2.jar(Progress给出的DataDirect)通过DataDirect方法将我的应用程序连接到数据库。使用这种方法,我可以通过选择查询获取数据,但我无法在非日志表中更新/插入数据。但是如果我使用 JTOpen 的 jt400.jar,同样的更新/插入效果很好。

但是在我们的 node.js 应用程序中是通过 db2.jar 而不是 jt400.jar 连接的。如果我使用 java 代码而不是节点,我将面临同样的问题。我在与 db2.jar 连接的 Squirrel Client 中使用了以下更新查询-

UPDATE MSSTQACEYK.MXAPGI001 SET PRCSD = 'Y' WHERE ORDNO = 'P544901' 

无论我使用 node.js 还是 Java,它都会抛出以下错误 -

Error: [DataDirect][DB2 JDBC Driver][DB2]Error occured with SQLCode -7008 with the following parameters: MXAPGI001 , MSSTQACEYK, 3, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null
SQLState:  55019
ErrorCode: -7008 

以下是我用来检查此操作的示例 java 代码 -


   String sql = "INSERT INTO MSSTQACEYK.MXAPGI001 (ORDNO) VALUES ('P544901') ";
   Class.forName("com.ddtek.jdbc.db2.DB2Driver");
   String url = "jdbc:datadirect:db2://hostname:port;DatabaseName=APG;";
   Connection con = DriverManager.getConnection(url, "UName","Pass");
   PreparedStatement preparedStatement = con.prepareStatement(sql);
   preparedStatement.executeUpdate();
   System.out.println("Record Inserted");
 

提前致谢 -

【问题讨论】:

【参考方案1】:

IBM JDBC 驱动程序包含一个属性“事务隔离”,当设置为“无”时,您可以更新/插入到非日志表中。

查看您的 DataDirect 驱动程序是否支持该属性。

IBM i JDBC docs

【讨论】:

我们可以通过 setIsolationLevel() 在 java 中执行此操作,但我将 node.js 作为数据层,在这里我没有这样的选项。有没有其他方法可以做到这一点???

以上是关于使用 Data Direct DB2 JDBC 驱动程序更新/插入未记录表的查询的主要内容,如果未能解决你的问题,请参考以下文章

在 Shell 脚本中通过 JDBC 连接到 DB2

DB2 JDBC Windows 身份验证

jsp用jdbc连接db2数据库的方法

如何在 Hibernate 中使用 DB2 JDBC 驱动程序

与 DB2 的 JDBC 连接?

在 DB2 窗口上使用 JDBC 运行多语句查询