2

我正在使用 Netbeans 开发一个 GUI 桌面应用程序。我已经对总数进行了验证,但没有显示结果。请查看编码天气是否有一些更改或是否错误。当我执行它时,在第 3 列中显示错误并且没有结果

private void jButton15ActionPerformed(java.awt.event.ActionEvent evt) {                                          
    Connection con;
    Statement stmt;
    try {
      Class.forName("sun.jdbc.odbc.JdbcOdbc");
    } catch (ClassNotFoundException ex) {
        JOptionPane.showMessageDialog(null, ex);
    }
    try {
        con= DriverManager.getConnection("Jdbc:Odbc:food");
        stmt= con.createStatement();

        String st= JcbSub.getSelectedItem().toString();
        String qt= quantity.getText().toString();
        String query;

        Double u_p= (Double) jTable3.getValueAt(row, 1);
        Integer qut= (Integer) jTable3.getValueAt(row, 2);
        Double tot= u_p * qut; //product of column 1 & column 2


        query="select i_price from food where i_name='"+JcbSub.getSelectedItem()+"'";
        ResultSet rs= stmt.executeQuery(query);

        while(rs.next()){
        jTable3.setValueAt(st, row, 0);
        jTable3.setValueAt(rs.getString("i_price"), row, 1); 
        jTable3.setValueAt(qt, row, 2);
        jTable3.setValueAt(tot, row, 3);  //result column

        row ++;
        }

       } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, ex);
    } 
}
4

2 回答 2

2

实际上,第 1 列中的值是从数据库表中选择的,第 2 列的值是使用 jTextField 手动输入并传输到第 2 列的

扩展您的 TableModel 并覆盖 setValueAt() 方法。

每当第 1 列或第 2 列中的值发生变化(并且都包含非空值)时,您应该计算乘积并更新第 3 列。

于 2013-06-08T19:43:56.503 回答
0

不要做java,而是使用参数化查询,例如做类似的事情

query="select name, i_price, @qty,@total, @qty*@total from food where i_name=@name"

将参数添加到查询中,将它们的值设置为 qt、tot 和 st,并且 Bob 是你母亲姐姐的兄弟,你也没有潜在的 sql 注入攻击......

OWASP 指南 Java 参数化查询

于 2013-06-08T23:18:14.753 回答