0

我想更新我的 SQLite 数据库中的记录。该记录存储在一个表中,表中的字段由 annotation 描述@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` = ?
4

1 回答 1

4

默认情况下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();
于 2013-01-27T20:51:59.443 回答