我想更新SQLite数据库中的记录。该记录存储在表中,表中的字段由注释@DatabaseField(canBeNull = false)
描述。首先,我存储一条记录,填写所有必需的值,然后尝试更新它。
我只想更新记录的某些值。例如:
Order o = new Order();
o.setStatus(OrderStatus.PENDING);
o.setIdOrder(1);
orderDAO.update(order);
我使用
update
的RuntimeExceptionDao
方法。它使用所有列构造完整的更新查询。例如:
UPDATE `order` SET `idCustomer` = ?, `number` = ?, `orderDate` = ?, `status` = ? WHERE `idOrder` = ?
这让我感到异常
java.lang.RuntimeException: java.sql.SQLException: Unable to run update stmt on object Order
如何为
UPDATE
查询指定字段?我只想要这个查询UPDATE `order` SET `status` = ? WHERE `idOrder` = ?
最佳答案
默认情况下,dao.update(...)
更新所有字段。它不知道您只更改了其中的几个内容。
通常,您从数据库中请求该项目,对其进行更改并调用dao.update(...)
:
Order order = orderDao.queryForId(1);
if (order.getStatus() != OrderStatus.PENDING) {
order.setStatus(OrderStatus.PENDING);
orderDao.update(order);
}
这使您可以测试当前
Order
状态等。如果必须创建自定义UPDATE
方法,则可以使用UpdateBuilder
:http://ormlite.com/docs/update-builder
例如:
UpdateBuilder<Order, Integer> updateBuilder = orderDAO.updateBuilder();
updateBuilder.updateColumnValue(Order.STATUS_FIELD_NAME, OrderStatus.PENDING);
updateBuilder.where().eq(Order.ID_FIELD_NAME, 1);
updateBuilder.update();