2012-04-10 18 views
0

Ich habe eine Tabelle in SQLite AndroidUpdate-Probleme in SQLite Tabelle

table name- score 
columns- rank  time  moves 

ich die Reihen jener Datensätze, deren Zeit größer als eine vorgegebene Zeit erhöhen möchten, also schrieb ich diese beiden Codes.

ContentValues updatedValue = new ContentValues(); 
updatedValue.put(KEY_RANK, KEY_RANK+1); //KEY_RANK is a final string "rank" column name 
db.update(SCORE, updatedValue, KEY_TIME_ELAPSED + ">=" + time, null); //KEY_TIME_ELAPSED = "time" 

und andere Schnipsel ist

db.rawQuery("UPDATE "+ TABLE_NAME2 + " SET "+ KEY_RANK + " = " + KEY_RANK + " + 1 WHERE " + KEY_TIME_ELAPSED + " >= " + time + ";", null); 

In beiden Fällen ist es nicht aktualisiert. Kann jemand sagen, wo liege ich falsch? Beide Snippets sind der richtige Weg, um in meinem Fall zu aktualisieren oder nicht? Wenn einer oder beide falsch liegen, dann bitte erwähnen, welcher falsch ist?

+0

ist 'Zeit' Spalte Zeichenfolge? – waqaslam

+0

Zeit Spalte ist Ganzzahl nicht Zeichenfolge. –

+0

erzeugt die Abfrage einen Fehler? – waqaslam

Antwort

0

Zweite Option ist der Weg, es zu tun. Aber Sie müssen execSQL verwenden, weil Sie keinen Cursor im Gegenzug erwarten.

db.execSQL("UPDATE "+ TABLE_NAME2 + " SET "+ KEY_RANK + " = " + KEY_RANK + 
" + 1 WHERE " + KEY_TIME_ELAPSED + " >= " + time + ";"); 
+0

Aber nach der Dokumentation sollte execSQL() verwendet werden, wenn unsere Abfrage nicht INSERT/UPDATE/DELETE usw. –

+0

ist Versuchen Sie es einfach, weil Sie keine Daten zurückgeben. – waqaslam

0

Wenn KEY_RANK eine Zeichenfolge ist, versuchen Sie anscheinend, den Spaltennamen auf string + 1 festzulegen.

Ich glaube, Sie sollten zuerst den Wert in dieser Spalte herausfinden, dann inkrementieren und dann zurückstellen.

Ich bin nicht sicher, ob Sie das in einer Zeile tun können.

0

debuggen Sie die Informationen, die Sie so aktualisieren möchten holen könnte versuchen, eine DB-Abfrage zu tun, dass Sie sehen können, was sie bekommen. ("SELECT * FROM" + TABLE_NAME2 + "WO" + KEY_TIME_ELAPSED + "> =" + Zeit + ";")

Ansonsten: Wenn Sie beginTransaction() verwenden, stellen Sie sicher, dass es eine endTransaction() gibt .