使用 Java 将值插入数据库
Insert values into Database with Java
你好,我有一个 Jtable 和一个 JFormattedTextField,我在其中输入要插入到数据库中的值。
我使用了 PreparedStatement 但输出给出了错误 [SQL0418] Utilização de marcador de parâmetro ou NULL não válida.
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());
}
我不知道我做错了什么。
这是我的第一个 post 如果您对我的问题有任何疑问,请告诉我。
当您 运行 您的代码时,运行 在 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 代码更改为“调用 qgpl/testHello”,而不是“插入到...”代码。当您 运行 java 代码时,您应该会在 QSYSOPR 中看到消息。
你好,我有一个 Jtable 和一个 JFormattedTextField,我在其中输入要插入到数据库中的值。 我使用了 PreparedStatement 但输出给出了错误 [SQL0418] Utilização de marcador de parâmetro ou NULL não válida.
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());
}
我不知道我做错了什么。 这是我的第一个 post 如果您对我的问题有任何疑问,请告诉我。
当您 运行 您的代码时,运行 在 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 代码更改为“调用 qgpl/testHello”,而不是“插入到...”代码。当您 运行 java 代码时,您应该会在 QSYSOPR 中看到消息。