连接到mysql数据库的Java销售点系统

时间:2019-09-13 05:40:32

标签: java mysql

如果您单击“付款”,则POS系统会执行某种形式的计算。当按下“支付”按钮时,将从“小计”文本字段中的任何值中减去“支付”文本字段中的数值,然后将余额同时显示在“余额”文本字段中。插入相应列的“销售”表中。即使我数据库中的“ balance”列的长度为INT数据类型,“ balance”文本字段中的值也不会插入到其对应的列中。

注意:有趣的是,如果我将“ balance”的数据类型更改为varchar,则会插入数据,但显示0而不是我想要的实际值。

下面是我的销售方式

错误是

  

com.mysql.jdbc.MysqlDataTruncation:数据截断:不正确的整数值:“对于第1行的'balance'列为''] Image

private void sales(){
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd");
        LocalDateTime now = LocalDateTime.now();
        String date = dtf.format(now);

        String subT = subtotal_textfield.getText();
        String payinKsh = pay_textfield.getText();
        String bal = balance_textfield.getText();

        int lastinsertID = 0;

        try {
            Class.forName("com.mysql.jdbc.Driver");
   conn = DriverManager.getConnection("jdbc:mysql://localhost/supermarket", "root","");
   String query = "insert into sales(date,subtotal,pay,balance)values(?,?,?,?)";
     pst = conn.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
     pst.setString(1, date);
     pst.setString(2, subT);
     pst.setString(3, payinKsh);
     pst.setString(4, bal);
     pst.executeUpdate();

     ResultSet generatedKey = pst.getGeneratedKeys();

            if (generatedKey.next()) {
               lastinsertID = generatedKey.getInt(1);
            }
             JOptionPane.showMessageDialog(this, lastinsertID);

        } catch (ClassNotFoundException ex) {
            Logger.getLogger(POS.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(POS.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

1 个答案:

答案 0 :(得分:0)

这是由于数据类型不匹配而发生的。您必须采用相似/匹配/相同的数据类型来插入它们。如您所述,将balance列保持为INT,然后像下面这样将bal字符串值转换为int

Integer.parseInt(bal);

因此,更改您的

pst.setString(4, bal);

此声明->(已编辑)

try
{
    pst.setInt(4, Integer.parseInt(bal));
} catch(Exception e)
{
    pst.setInt(4, 0);
}

或者,将balance column更改为varchar并插入bal作为字符串值,但首先检查您在bal变量中得到了什么