OrmLite:检查CreateOrUpdate是否确实更改了任何值

时间:2013-10-07 10:37:36

标签: android ormlite

有没有办法在没有构建自定义SQL语句的情况下检查OrmLite的CreateOrUpdate调用是否确实改变了数据库中的任何值?

Dao.CreateOrUpdateStatus.getNumLinesChanged()返回受影响的行值,因此如果更新的对象完全没有更改,则结果为1。

2 个答案:

答案 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();
        }