成功交易后 SQLite 不记录值

SQLite not recording values after successful transaction

我在使用自动增量在 table 中插入记录时遇到了这种奇怪的情况。

这里是 table:

String CREATE_TABLE_ROUTES = "CREATE TABLE " + TABLE_ROUTES +
                "(" +
                PK_ROUTE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                FK_ROUTE_TRACK_ID + " INTEGER," +
                COL_ROUTE_ORDER + " INTEGER(11)," +
                COL_ROUTE_LAT + " FLOAT," +
                COL_ROUTE_LONG + " FLOAT," +
                COL_ROUTE_TIME + " FLOAT," +
                COL_ROUTE_SPEED + " FLOAT," +
                COL_ROUTE_TIME_MS + " INTEGER(3)" +
                ")";

我的插入方法不起作用:

public void updateRoute(LatLongTime latLongTime, long track_id) {

        long route_id = -2;
        SQLiteDatabase db = getWritableDatabase();

        db.beginTransaction();

        try {

            ContentValues values = new ContentValues();
            values.put(FK_ROUTE_TRACK_ID, track_id);
            values.put(COL_ROUTE_ORDER, getLastOrderForTrack(track_id) + 1); 
            values.put(COL_ROUTE_LAT, latLongTime.getLatitude());
            values.put(COL_ROUTE_LONG, latLongTime.getLongitude());
            values.put(COL_ROUTE_SPEED, latLongTime.getSpeed());
            values.put(COL_ROUTE_TIME, latLongTime.getInstante());

            route_id = db.insert(TABLE_ROUTES, null, values);

            db.setTransactionSuccessful();

        } catch (Exception e) {
            Log.e(TAG, "ERROR Recording: " + e.getMessage());
        } finally {
            Log.d(TAG, "Route inserted: " + route_id + " track id: " + track_id);
            db.endTransaction();
            db.close();
        }
    }

调试中得到了一个成功的事务,但是再次调用这个方法后,insert方法生成了同样的route_id。 代码运行后没有任何记录(无一例外)。

这是我在调试时多次调用此函数时得到的结果:

D/Database: Route inserted: 9362 track: 103
D/Database: Route inserted: 9362 track: 103
D/Database: Route inserted: 9362 track: 103

我觉得最奇怪的是,如果我使用 ctrl+U (Android Studio) 并在单独的线程中调试它,这个函数开始正常工作并按预期增加 route_id .但仅在调试和重复此指令时:

db.beginTransaction();

    try {

        ContentValues values = new ContentValues();
        values.put(FK_ROUTE_TRACK_ID, track_id);
        values.put(COL_ROUTE_ORDER, getLastOrderForTrack(track_id) + 1); 
        values.put(COL_ROUTE_LAT, latLongTime.getLatitude());
        values.put(COL_ROUTE_LONG, latLongTime.getLongitude());
        values.put(COL_ROUTE_SPEED, latLongTime.getSpeed());
        values.put(COL_ROUTE_TIME, latLongTime.getInstante());

        route_id = db.insert(TABLE_ROUTES, null, values);

好吧,我明白了。 碰巧我将 SQLiteDatabase 定义为

SQLiteDatabase db = getWritableDatabase();

每个方法都使用相同的名称 (db)(我有 20 多个方法)。

将名称更改为 dbt,例如,解决了问题,现在可以正常工作了。

因为这是一个局部变量,所以应该在方法结束后使用和销毁它,但我不知道为什么,电脑出了问题。 如果有人可以对此提供一些解释,那就太好了,因为我解决了这个问题,但我只是猜测发生了什么,我不确定为什么不起作用。