如果您单击“付款”,则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);
}
}
答案 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
变量中得到了什么