2016-03-22 15 views
1

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); 

Antwort

0

Nun, ich habe es herausgefunden. Es kommt vor, dass ich SQLiteDatabase wurde definiert, wie

SQLiteDatabase db = getWritableDatabase(); 

mit dem gleichen Namen (db) auf jeder Methode (Ich habe mehr als 20 Verfahren).

Ändern Sie den Namen in dbt, zum Beispiel, lösen Sie das Problem und es funktioniert jetzt.

Da dies eine lokale Variable ist, sollte sie verwendet und zerstört werden, nachdem die Methode beendet wurde, aber ich weiß nicht warum, der Computer hat versagt. Es wäre schön, wenn jemand eine Erklärung dazu liefern könnte, weil ich das Problem gelöst habe, aber ich habe nur eine Vermutung darüber, was vor sich geht, und ich bin mir nicht sicher, warum der Grund nicht funktioniert hat.

Verwandte Themen