【发布时间】:2016-07-11 07:05:12
【问题描述】:
我正在尝试提出一个更新查询,我可以在我的所有应用程序中使用它来更新表(库存)。这是我到目前为止所拥有的:
public void updateInventory(Inventory inventory){
PreparedStatement ps=null;
try {
String query =
"UPDATE "+TableName.INVENTORY +" "+
"SET quantity=IFNULL(?, quantity), full_stock=IFNULL(?, full_stock), reorder_level=IFNULL(?, reorder_level), selling_price=IFNULL(?, selling_price), delete_status=IFNULL(?, delete_status), product_id=IFNULL(?, product_id) "+
"WHERE id = ? OR product_id=IFNULL(?, product_id) ";
connection = hikariDS.getConnection();
ps = connection.prepareStatement(query);
ps.setFloat(1,inventory.getQuantity());
ps.setFloat(2,inventory.getFullStock());
ps.setFloat(3,inventory.getReorderLevel());
ps.setFloat(4,inventory.getPrice());
ps.setInt(5, inventory.getDeleteStatus());
ps.setInt(6, inventory.getProdId());
ps.setInt(7, inventory.getId());
ps.setInt(8, inventory.getProdId());
ps.executeUpdate();
} catch(SQLException e){ e.printStackTrace();}
finally{
if( connection != null ){
try {connection.close();}
catch (SQLException ex) {logger.log(Level.SEVERE, null, ex);}
}
if( ps != null){
try { ps.close();}
catch (SQLException ex) { logger.log(Level.SEVERE, null, ex);}
}
}
}
上面的查询应该只在对象中设置了新值的情况下更新列,但如果没有设置,只需使用列中的现有值提供它。
问题是:如果从 Inventory 对象中检索到的值为 null 或 0 值,它不会使用现有值进行更新。
【问题讨论】:
-
Inventory 对象怎么可能是
0? -
不是对象本身,而是属性。例如,我只想更新价格但未设置数量,所以我假设价格属性将包含一个值但数量为零
-
@pippilongstocking:您提供的链接是我正在尝试做的,但在我的情况下适用于所有列。问题是如果属性为 0,仍然需要更新属性值而不是列值
-
尝试使用 JPA 并为您的记录创建实体对象 - 您更希望能够使用 JPA 干净地控制这种类型的动态更新。
标签: java mysql prepared-statement