Ich habe diese seltsame Situation über das Einfügen eines Datensatzes in einer Tabelle mit Autoincrement. HierSQLite notiert Werte nach erfolgreicher Transaktion
ist die Tabelle:
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)" +
")";
Das ist mein insert-Methode ist, das nicht funktioniert:
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 es bekam ich eine erfolgreiche Transaktion, aber nach dieser Methode erneut aufgerufen, die Die selbe route_id wird von der Methode insert generiert. Es wird nichts aufgezeichnet, nachdem der Code ausgeführt wurde (ohne Ausnahme).
Dies ist, was ich bekomme, wenn ich diese Funktion einige Zeit an der Debug-Aufruf:
D/Datenbank: Route eingefügt: 9362 Bahn: 103
D/Datenbank: Route eingefügt: 9362 Bahn: 103
D/Datenbank: Route eingefügt: 9362 Bahn: 103
Was ich am meisten seltsam finden, wenn ich ctrl + U (Android Studio) verwenden und es in einem separaten Thread debbug, diese Funktionen richtig zu arbeiten beginnen und erhöht die route_id wie erwartet. Aber nur beim Debuggen und Wiederholen dieser Anweisungen:
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);