0

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

Dao.CreateOrUpdateStatus.getNumLinesChanged()返回受影响的行值,因此如果更新的对象根本没有改变,结果也是 1。

4

2 回答 2

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;
    }
}

这是一个有效的解决方案,但我不喜欢它。如果有人有更好的解决方案,而无需进行额外的数据库调用,请告诉我。

于 2013-10-07T12:09:12.247 回答
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();
        }
于 2017-11-23T15:11:34.707 回答