【问题标题】:Insert values into Database with Java使用 Java 将值插入数据库
【发布时间】:2021-02-09 19:38:59
【问题描述】:

您好,我有一个 Jtable 和一个 JFormattedTextField,我在其中输入要插入数据库的值。 我使用了 PreparedStatement,但输出给出了错误 [SQL0418] Utilização de marcador de parâmetro ou NULL não valida。

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()); 
        }  

我不知道我做错了什么。 这是我的第一篇文章,如果您对我的要求有任何疑问,请告诉我。

【问题讨论】:

  • 你能翻译错误信息吗?
  • documentation about SQL0418 说可能出了什么问题。可能数据库在准备时不知道 ?, convert(datetime, ?, 111) 是哪些类型
  • 错误 [SQL0418] 使用参数标记或 NULL 无效。
  • 我会检查文档

标签: java sql swing jtable ibm-midrange


【解决方案1】:

当您运行代码时,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 中看到该消息。

【讨论】:

  • 问题是我还有其他按钮可以在数据库中插入一些按钮,只有这个按钮给了我错误
  • 将您的 INSERT INTO 语句移动到 SQL 过程中。将 java 代码中的 INSERT INTO 语句替换为对 SQL 过程的调用。然后在 SQL 过程中,您可以插入有助于跟踪服务器上运行的作业的作业日志的代码。这将显示由 INSERT INTO 语句引起的 SQL 错误。如果没有自动生成,您甚至可以将 SQL 过程中的代码运行到 DSPJOBLOG。
猜你喜欢
  • 1970-01-01
  • 2015-02-08
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
相关资源
最近更新 更多