问题描述
您好,我有一个Jtable和jformattedtextfield,在其中输入要插入数据库的值。 我使用了PreparedStatement,但是输出给出了错误[sql0418]参数的使用率或NULL值。
try {
Connection con = DriverManager.getConnection("jdbc:as400://" + host,user,pwd);
// create new statement from connection
//Statement stmt = con.createStatement();
ResultSet rs;
// int rows=table.getRowCount();
//for(int row = 0; row<rows; row++)
// {
String PTCDCT = (String)table.getValueAt(0,0);
String OFNUPK = (String) table.getValueAt(0,1);
String TFCCMP = (String)table.getValueAt(0,2);
String TFCPAI = (String)table.getValueAt(0,3);
String TPTEMP = (String)table.getValueAt(0,4);
int OFNUP = Integer.parseInt(OFNUPK);
double TPTEM = Double.parseDouble(TPTEMP);
String querq = " INSERT INTO SICGA00F55.FTEMPO(TPRNPT,TPNUOF,TPLV01,TPTEMP,TPPZIV,TPRnop)"
+ "SELECT t.PTRNPP,f.OFNUPK,concat(p.PTSEC,'00000',a.TFNRLC),?,convert(datetime,111),MAX(p.TPRnop) + 1 "
+ "FROM SICGA00F55.TPOSTO t,SICGA00F55.TPOSTCM p,SICGA00F55.FORFAB f,$$CLI00F55.FOFFAN a,SICGA00F55.FTEMPO p"
+ "WHERE t.PTCDCT= ? AND t.PTCDCT= p.PTCDCT AND f.OFNUPK= ? AND "
+ "f.OFNUPK= a.TFSNOF AND a.TFCCMP= ? AND a.TFCPAI= ?";
PreparedStatement preparedStmt = con.prepareStatement(querq);
preparedStmt.setDouble(1,TPTEM);
preparedStmt.setString(2,textId.getText());
preparedStmt.setString(3,PTCDCT);
preparedStmt.setInt(4,OFNUP);
preparedStmt.setString(5,TFCCMP);
preparedStmt.setString(6,TFCPAI);
preparedStmt.executeUpdate(querq);
//ResultSet rs = stmt.executeQuery(querq);
}catch (sqlException ex) {
System.err.println("Got an exception! ");
JOptionPane.showMessageDialog(null,"Algum valor não está correto!","Error",JOptionPane.ERROR_MESSAGE);
System.err.println(ex.getMessage());
}
我不知道我做错了什么。 这是我的第一篇文章,如果您对即时通讯有任何疑问,请告诉我。
解决方法
运行代码时,AS400上是否运行任何东西?
当我对这类问题进行故障排除时,我希望从基础开始。这是一个将消息发送到QSYSOPR消息队列的SQL过程:
CREATE or replace PROCEDURE qgpl/testHello(
)
LANGUAGE SQL
BEGIN
declare vCmd char(512) default ' ' ;
declare vCmdLgth decimal(15,5) default 0 ;
set vCmd = 'SNDMSG MSG(''test hello'') TOUSR(*SYSOPR)' ;
set vCmdLgth = 80 ;
call qcmdexc( vCmd,vCmdLgth ) ;
end
使用STRSQL命令提示符创建过程,然后运行它。然后,DSPMSG QSYSOPR在QSYSOPR消息队列中查看该消息。
接下来,将您的Java代码更改为“ call qgpl / testHello”,而不是“ insert into ...”代码。运行Java代码时,您应该在QSYSOPR中看到消息。