Sqlite / android:insert实际上替换了行

时间:2018-03-06 23:33:33

标签: android sqlite bulkinsert

在Udacity的开发Android应用程序中,他们正在构建的应用程序在从openweathermap api获取数据后,在列表视图中显示天气预报。数据通过下面显示的函数bulkInsert保存到db中。通过菜单中的“刷新”选项调用更新。

没有代码处理旧数据的修剪,但每次刷新后数据库中的行数保持不变。事实证明,在插入14个新行的循环之后,最后14个旧行消失了。后者有新的行ID。

示例:

我们从:

开始
_id=55
_id=56
_id=57
…
_id=721
_id=722
_id=723
_id=724
_id=725
_id=726

批量插入后,ID列表变为:

_id=55
_id=56
_id=57
…
_id=735
_id=736
_id=737
_id=738
_id=739
_id=740

缺少/替换行713-726。 bulkinsert的代码:

@Override
public int bulkInsert(Uri uri, ContentValues[] values) {
    final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
    final int match = sUriMatcher.match(uri);
    switch (match) {
        case WEATHER:
        db.beginTransaction();
        int returnCount = 0;
        try {
            for (ContentValues value : values) {
                normalizeDate(value);
                long _id =  db.insert(WeatherContract.WeatherEntry.TABLE_NAME, null, value);
                if (_id != -1) {
                    returnCount++;
                    Log.i(“id:”, " "+_id);
                }
            }
            db.setTransactionSuccessful();
        } finally {
        db.endTransaction();
    }
    getContext().getContentResolver().notifyChange(uri, null);
    return returnCount;
    default:
    return super.bulkInsert(uri, values);
    }
}

insert是vanilla SQLiteDatabase方法,它不应该弄乱现有的行。然而,当该行被注释掉时,旧行仍保留在数据库中。

有什么想法发生了什么?

0 个答案:

没有答案