2016-08-27 62 views
0

当我更新,我得到数据截断误差(太长列ITEM_CODE数据)

数据截断误差(数据太长,列item_codeat列#)

我使用varchar(45)在DB中为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); 
} 
+0

发布http://stackoverflow.com/help/mcve。 – c0der

+0

嗯,错误是项目代码对于varchar(45)来说太长了。您还绝对需要了解准备好的语句(http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html),因为只要其中一个文本字段包含单引号,代码就会失败,并且会受到SQL注入攻击。他们还允许将日期存储为日期,而不必使用数据库特定的特定于语言环境的格式对其进行格式化。最后,他们使代码更具可读性并且不易出错。 –

回答

0

,我建议您验证模型实体的不同领域,这取决于对数据库表中的相应列的限制。 希望得到这个帮助。

0

您所坚持的数据太长于预期。 item_codeat数据库中的列仅需要少于或等于45个字符的字符串。

解决方案

1 - 如果你可以改变你的数据库。的item_codeat的数据类型更改为TEXT

2 - 如果你不能改变你需要把某种验证来限制客户数据库/用户输入有效的item_codeat,其长度小于45。