【发布时间】:2017-01-03 17:44:36
【问题描述】:
当我更新时,我得到了
数据截断错误(数据对于列 item_codeat row # 而言太长)
我在 DB 中将varchar(45) 用于itemcode。
String category="";
String item_code = txt_inventory_item_code.getText();
String item_name = txt_inventory_item_name.getText();
Format formatter = new SimpleDateFormat("yyyy-MM-dd");
String date = formatter.format(txt_inventory_date.getDate());
String expiry_date = formatter.format(txt_inventory_expiry_date.getDate());
int quantity=Integer.parseInt(txt_inventory_quantity.getText());
double unit_price=Double.parseDouble(txt_inventory_unit_price.getText());
try{
st = conn.createStatement();
String SQL = "Update inventory SET "
+ "item_code='"+txt_inventory_item_code+"',"
+ "item_name='"+txt_inventory_item_name+"',"
+ "date='"+formatter.format(txt_inventory_date.getDate())+"',"
+ "expiry_date='"+formatter.format(txt_inventory_expiry_date.getDate())+"',"
+ "quantity='"+txt_inventory_quantity+"',"
+ "unit_price='"+txt_inventory_unit_price+"' WHERE inventory_id Like "+txt_inventory_inventory_id.getText();
st.executeUpdate(SQL);
JOptionPane.showMessageDialog(null,"Updated Successfully");
}
catch (SQLException | HeadlessException e)
{
JOptionPane.showMessageDialog(null,e);
}
【问题讨论】:
-
嗯,错误是项目代码对于 varchar(45) 来说太长了。您还绝对需要了解准备好的语句 (docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html),因为一旦其中一个文本字段包含单引号,您的代码就会失败,并且它会受到 SQL 注入攻击。它们还允许将日期存储为日期,而不必使用特定于数据库、特定于语言环境的格式对其进行格式化。最后,它们使代码更具可读性且不易出错。
标签: java mysql updates truncate