在我的OS / 400 v6.x系统中,我使用ADDPFTRG命令为物理文件(DB2表)创建了一个AFTER INSERT触发器,每次在RPG IV程序上执行WRITE命令或发出INSERT语句时都会正确触发该命令来自STRSQL,但是当我使用JT400(JTOpen)JDBC驱动程序从Java程序执行INSERT语句时,触发器不会被触发。
在两种情况下(从OS400和Java),记录都会成功插入,但只有在从OS400方式插入记录时才会触发该触发器。
我已经在IBM redbooks,JTOpen forums和Google搜索了与我的案例有关的任何内容,但根本没有找到任何内容。
可悲的是,由于JT400 jar没有版本号,我无法判断我的版本是否过时,我还没有机会尝试从JTOpen页面中获取最新版本。< / p>
是否有任何技术限制或库错误阻止我从Java / JT400触发DB2触发器?
答案 0 :(得分:0)
我解决了我的问题并将发布解决方案,以便其他任何人(包括我未来的自我)遇到类似问题至少可以获得有关如何排除故障的提示。
问题与添加到JDBC连接用户的库有关。触发器实际上被触发但是我没注意到它因为我希望它在调用另一个RPG程序(比如Program2)之后调用RPG程序(比如,Program1)。我无法看到第二个程序被调用,所以我认为我的触发器没有被JDBC INSERT SQL语句触发。
当我检查WRKACTJOB中的QZDAZOINIT作业日志时,我没有注意到我的Program2没有被调用,因为在我为JDBC连接配置的库中找不到它。我只添加了库以便能够看到Phisical数据文件(PF)而不是RPG程序(PGM),并且在我的触发器程序(Program1)中我试图调用另一个,所以我需要有程序库JDBC连接用户。在JDBC连接属性中配置了所有必要库之后,它按预期工作。
答案 1 :(得分:0)
图书馆列表不是唯一的问题。你可能需要关心&#34; Threadsafe&#34;和&#34;多线程的工作行动&#34; ADDPFTRG命令的参数。
ADDPFTRG .... THDSAFE(* YES)MLTTHDACN(* RUN)