我想更新SQLite DB中的记录。此记录存储在包含注释@DatabaseField(canBeNull = false)
描述的字段的表中。首先我存储一条记录,我填写所有必需的值,然后我尝试更新它。
我想只更新一些记录值。例如:
Order o = new Order();
o.setStatus(OrderStatus.PENDING);
o.setIdOrder(1);
orderDAO.update(order);
我使用update
的{{1}}方法。它构建了包含所有列的完整更新查询。
例如:
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
答案 0 :(得分: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
:
例如:
UpdateBuilder<Order, Integer> updateBuilder = orderDAO.updateBuilder();
updateBuilder.updateColumnValue(Order.STATUS_FIELD_NAME, OrderStatus.PENDING);
updateBuilder.where().eq(Order.ID_FIELD_NAME, 1);
updateBuilder.update();