オートインクリメントを使ってテーブルにレコードを挿入するという奇妙な状況が起こっています。ここでトランザクションが成功した後にSQLiteが値を記録しない
はテーブルです:
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)" +
")";
これは動作していない私のinsertメソッドです:
それをDebbugingpublic 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();
}
}
私は成功したトランザクションを得たが、このメソッドが再び呼び出された後、同じroute_idが挿入メソッドによって生成されます。 コード実行後に何も記録されません(例外はありません)。
これは私がデバッグでは、いくつかの時間、この関数を呼び出すときに私が得るものです:
D /データベース:ルートが挿入された:9362トラック:103
D /データベース:ルートが挿入された:9362トラック:103
D /データベース:ルートが挿入された:9362トラック:103
私が最も奇妙見つける何が、私は、CTRL + U(Androidのメーカー)を使用し、分離したスレッドでそれをdebbug場合、この機能が正常に動作し始めるということです期待どおりに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);