有没有办法在没有构建自定义SQL语句的情况下检查OrmLite的CreateOrUpdate调用是否确实改变了数据库中的任何值?
Dao.CreateOrUpdateStatus.getNumLinesChanged()
返回受影响的行值,因此如果更新的对象完全没有更改,则结果为1。
答案 0 :(得分:0)
我将以下方法添加到我的类中,并在每个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;
}
}
这是一个有效的解决方案,但我不喜欢它。如果有人有更好的解决方案,而不需要额外的数据库调用,请告诉我。
答案 1 :(得分:0)
试试这个:(付款表示例)
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();
}