有没有办法在不构建自定义 SQL 语句的情况下检查 OrmLite 的 CreateOrUpdate 调用是否确实更改了数据库中的任何值?
Dao.CreateOrUpdateStatus.getNumLinesChanged()
返回受影响的行值,因此如果更新的对象根本没有改变,结果也是 1。
我将以下方法添加到我的类中,并在每个 setXXX 方法中调用这些方法之一。
private boolean objectChanged = false;
private void checkChanged(Object ob1, Object ob2) {
if (ob1 == null && ob2 == null) {
// both null = same, do nothing
return;
} else if (ob1 == null || ob2 == null) {
// only one null
objectChanged = true;
} else if (ob2.equals(ob1)) {
// same, do nothing
return;
} else {
objectChanged = true;
}
}
private void checkChanged(int int1, int int2) {
if (int1 != int2) {
objectChanged = true;
}
}
这是一个有效的解决方案,但我不喜欢它。如果有人有更好的解决方案,而无需进行额外的数据库调用,请告诉我。
试试这个:(付款表示例)
try {
final Dao paymentsTable = getHelper().getPaymentsTable();
Dao.CreateOrUpdateStatus changedRows = paymentsTable.createOrUpdate(_payments);
Log.e("WAS CREATED", Boolean.toString(changedRows.isCreated()) );
Log.e("WAS UPDATED", Boolean.toString(changedRows.isUpdated()) );
} catch (SQLException e) {
e.printStackTrace();
}