【发布时间】:2015-03-06 20:40:59
【问题描述】:
我正在编写一个小的 java 程序,通过 jdbc(db2jcc.jar 版本 1.0.581)将数据写入 AS/400 DB2 表中,并且触发器与 INSERT 操作相关联。此触发器适用于与包含我的表 (f4104) 的库 (jdta73p10) 不同的库关联的各种表。
遵循我用来建立连接和读取完美运行的数据的代码。
import java.sql.*;
import com.ibm.db2.jcc.*;
public class ProvaNUMEAN13 {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
DB2DataSource dbds = new DB2DataSource();
dbds.setDriverType(4);
dbds.setServerName("a60d45bb");
dbds.setPortNumber(446);
dbds.setDatabaseName("prodgrp");
dbds.setDescription("Prova collegamento");
dbds.setUser("XXXXX");
dbds.setPassword("XXXXX");
Connection con = dbds.getConnection();
Statement stmtNum = con.createStatement();
stmtNum.executeQuery("select * from INTERFACCE.NUMEAN13");
ResultSet rs = stmtNum.getResultSet();
rs.next();
System.out.println("Valore numeratore: " + rs.getString("E13EAN"));
System.out.println("Tipo numeratore: " + rs.getString("K13KEY"));
stmtNum.close();
Statement stmtAnag = con.createStatement();
stmtAnag.executeQuery("select * from jdta73p10.f4101lb where IMLITM = " + "'" + args[0] + "'");
ResultSet rsAna = stmtAnag.getResultSet();
int idCodice = 0;
if (!rsAna.next()) {
System.out.println("Il codice " + args[0] + " non esiste in anagrafica!");
} else {
idCodice = rsAna.getInt("IMITM");
System.out.println("idCodice per " + args[0] + ": " + Integer.toString(idCodice));
Statement stmtQEAN = con.createStatement();
stmtQEAN.executeQuery("select IVALN, IVCITM, IVLITM, IVDSC1 from jdta73p10.f4104 where IVXRT = 'B ' and IVALN = '8000000000000'");
ResultSet rsQEAN = stmtQEAN.getResultSet();
if (rsQEAN.next()) {
System.out.println("Codice EAN per " + args[0] + " già presente: " + rsQEAN.getString("IVALN"));
System.out.println("Valore EAN13: " + rsQEAN.getString("IVCITM"));
System.out.println("Risultato ricerca per EAN13: " + rsQEAN.getString("IVLITM")+" - "+rsQEAN.getString("IVDSC1"));
}
}
}
}
问题是当我尝试执行 INSERT 操作时(如下所示);由于触发器执行,在 AS/400 中生成错误。
stmtQEAN.execute("insert into jdta73p10.f4104 (IVXRT,IVITM,IVCITM,IVDSC1,IVALN,IVLITM) values ('B ','18539','8000000000000','Prodotto PROVA','8000000000000','ABABABAB')");
这是 AS/400 方面的错误:
消息 ID 。 . . . . . : RNQ0211 严重性。 . . . . . . : 99
消息类型。 . . . . : 查询
发送日期。 . . . . . : 08/01/15 发送时间。 . . . . . : 10:01:31
消息。 . . . : 调用程序或过程时发生错误 *LIBL/PRHWRAPUSE (C G D F)。 原因 。 . . . . : 程序 INTERFACCE/TRG_F4104A 中的 RPG 程序 TRG_F4104A 在 语句 152 试图调用程序或过程 *LIBL/WS_MATERI,但是 无法访问程序或过程、库或所需的 服务程序。如果名称是 *N,则调用是过程绑定调用 指针。
恢复。 . . :查看作业日志以获取有关导致错误的原因的更多信息 错误并联系负责程序维护的人员。 回复消息的可能选择。 . . . . . . . . . . . . . . :
D -- 获取 RPG 格式的转储。
S -- 获取系统转储。
我的问题是:如何指定触发需要的其他库?在旧版本的工具(用 Delphi 编写)中,我使用了 Client/Access ODBC,其中有一个特殊字段,您可以在其中输入其他库,但现在我不知道该怎么做。
【问题讨论】:
-
您应该包含确切的错误代码和消息。
-
好的,问题已编辑并添加错误。
-
我不认为在客户端您无能为力。触发器代码不正确或它试图调用的程序,触发器无法访问 WS_MATERI。
标签: jdbc db2 ibm-midrange