java - 从 Java 调用 RPG 程序时 SaveObject 作业失败

标签 java connection db2 jndi rpg

我正在尝试从 Java 调用 RPG 程序。我可以使用 DriverManager 使程序正确运行,如下所示:

Connection conn = DriverManager.getConnection("jdbc:as400://" + "sys" + "", "username", "pass");
Statement stmt = conn.createStatement();
Boolean sqlBool = stmt.execute("call DB2.PROGRAM");

但是...这不是我想要的方式。我想使用 JNDI 连接到 400 并运行程序调用,因为这就是我运行 SELECT、UPDATES、DELETES 等的方式...

这是我到目前为止的伪代码,我的 RPG 在 SaveObject 上失败了。

Context context = new InitialContext();
DataSource ds = (DataSource) context.lookup(JNDI_NAME);
Connection conn = datasource.getConnection();
Statement stmt = conn.createStatement();
Boolean sqlBool = stmt.execute("call DB2.PROGRAM");

这是 JNDI 连接的问题还是 RPG 的问题?

更新:似乎当 SaveObject 作业开始工作时,它表示该表已锁定。在运行 RPG 调用之前,我正在对该表进行插入和删除...有什么想法吗?即使我在处理后关闭与数据库的所有连接,什么会导致表仍然被锁定。

最佳答案

DB2 可以使表保持部分打开一段时间,因为它不知道何时再次需要它。下一秒可能会出现另一个 UPDATE,并且 DB2 希望避免每个事务都完全打开。只要这种情况持续下去,就可以发现锁争用。

如果遇到此类锁定,请先从 RPG 程序中尝试 ALCOBJ CONFLICT(*RQSRLS),然后查看 SaveObject 进程是否完成。请参阅该参数的 ALCOBJ 帮助文本,了解该参数何时有用的说明。

关于java - 从 Java 调用 RPG 程序时 SaveObject 作业失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26123899/

相关文章:

android - 获取错误 android.content.Context 无法解析为变量?

java - 如何使 HTTP 连接在一段时间后超时/断开连接?

db2 - BLOB 到字符串的转换 - DB2

sql - 选择具有随机 id 的不同两列

entity-framework - EntityFramework.IBM.DB2 无法连接到 db2

java - 完成后处理写入?

java - 无法在 Android 上验证 rsa 签名

java - 使用 https 协议(protocol)使用 Webservice

java - 使用正则表达式查找带@的单词

java - 通过 DavMail 将 Thunderbird 连接到 Exchange