java - 将值从 jtable 发送到 sql 时出现 SQL 异常

标签 java sql-server swing

我遇到了一个问题。当我尝试通过存储过程将数据从 jtable 发送到 sql 数据库时。这是我正在做的事情:

向jtable中插入数据

String b= jLabel116.getText(),c=jTextField6.getText(),e=jTextField20.getText(),f=jTextField25.getText(),g=jTextField48.getText();

float x,y,z;
x=Float.parseFloat(jTextField25.getText());
y=Float.parseFloat(jTextField48.getText());
z=x*y;
String total1=String.valueOf(z);

DefaultTableModel df = (DefaultTableModel) jTable5.getModel();
df.addRow(new Object[]{b,c,d,f,g,total1});
int rowsCount = jTable5.getRowCount();
int Price = 0,Qty=0, total=0;
for(int i=0;i<rowsCount;i++){
Price += Integer.parseInt(jTable5.getValueAt(i,3).toString());
Qty += Integer.parseInt(jTable5.getValueAt(i,4).toString());  
}
total = Price*Qty;
System.out.println(total);
jTextField26.setText(String.valueOf(total));
jTextField51.setText(String.valueOf(total));
jTextField50.setText(String.valueOf(Qty));
jTable5.setModel(df);

将数据发送到数据库

try{
    DefaultTableModel df = new DefaultTableModel();
    df=(DefaultTableModel) jTable5.getModel();
             CallableStatement cs=m.XC.prepareCall("call Prod_SALE (?,?,?,?,?,?,?,?)");    
        for (int i = 0; i < df.getRowCount(); i++) {
            for (int j = 0; j < df.getColumnCount(); j++) {
                Object o = df.getValueAt(i, j);
                System.out.println("object from table is  : " +o);
            cs.setString(j+1, (String)o);
          cs.addBatch();
            }
      cs.executeBatch();
          cs.clearParameters();
        }
    }
    catch(Exception ex){
         ex.printStackTrace();

错误异常:

java.sql.SQLException: Parameter-Set has missing values.
    at sun.jdbc.odbc.JdbcOdbcPreparedStatement.addBatch(JdbcOdbcPreparedStatement.java:1546)

请帮助我......我无法解决

最佳答案

设置one参数后,您可以在内部循环(变量j)中调用addBatch。显然这会失败,因为你有 8 个参数。 PreparedStatement.addBatch 的 Javadoc 说:

Adds a set of parameters to this PreparedStatement object's batch of commands.

您需要将对 addBatch 的调用移出内部循环。 (也许 executeBatch 也应该移出外循环(变量 i)。

DefaultTableModel df = (DefaultTableModel) jTable5.getModel();
CallableStatement cs=m.XC.prepareCall("call Prod_SALE (?,?,?,?,?,?,?,?)");    
for (int i = 0; i < df.getRowCount(); i++) 
{
    for (int j = 0; j < df.getColumnCount(); j++) 
    {
        Object o = df.getValueAt(i, j);
        System.out.println("object from table is  : " +o);
        cs.setString(j+1, (String)o);
    }
    cs.addBatch();
}
cs.executeBatch();

关于java - 将值从 jtable 发送到 sql 时出现 SQL 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37251447/

相关文章:

c# - 从两个 where 条件返回 SQL 值以在 C# 中显示

java - 如何从助手类将 String 发送到 JTextField?

java - 强制 java 应用程序成为焦点窗口

java - 如何从与另一个 JPA 实体相关的 JavaFX 表中检索数据?

sql-server - MS SQL Server 触发器更新项目评级和票数

java - 在 jsp 声明中访问 PageContext

mysql - 如何在查询中选择非 MAX() 的记录

java - 使用 Nimbus 和 Java 8U20 时 JList 中的颜色错误

java - 将字符串日期转换为日期

Java Applet 和浏览器卡住