我想更新SQLite数据库中的记录。该记录存储在表中,表中的字段由注释@DatabaseField(canBeNull = false)描述。首先,我存储一条记录,填写所有必需的值,然后尝试更新它。
我只想更新记录的某些值。例如:

Order o = new Order();
o.setStatus(OrderStatus.PENDING);
o.setIdOrder(1);

orderDAO.update(order);


我使用updateRuntimeExceptionDao方法。它使用所有列构造完整的更新查询。

例如:

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();

10-02 04:15
查看更多