0

SQLite DB のレコードを更新したいと考えています。このレコードは、注釈によって記述されたフィールドを持つテーブルに格納されます@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 に答える