ORMLite - 更新没有空值

时间:2013-01-27 20:45:54

标签: java android sqlite ormlite

我想更新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

1 个答案:

答案 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

  

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