【发布时间】:2016-03-22 22:58:47
【问题描述】:
我遇到了一种奇怪的情况,即在具有自动增量的表中插入记录。
这是表格:
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();
}
}
debbuging得到了一个成功的事务,但是再次调用这个方法后,insert方法生成了相同的route_id。 代码运行后没有任何记录(无一例外)。
这是我在调试时多次调用此函数时得到的结果:
D/数据库:插入的路线:9362 轨道:103
D/数据库:插入的路线:9362 轨道:103
D/数据库:插入的路线:9362 轨道: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);
【问题讨论】:
标签: android sqlite insert android-sqlite