2016-05-19 6 views
1

Ich versuche, mehrere Zeilen mit SQLiteDatabase.update auf bestimmte Tabelle zu aktualisieren.SQLiteDatabase.update wirkt sich nicht auf Zeilen

-Code Abfrage auszuführen:

public void onJobStart(int fileType) { 

    ContentValues cv = new ContentValues(); 
    cv.put(Contract.Entry.UPLOAD_STATUS, STATUS_READY); 

    String whereClause = String.format(
      Locale.US, 
      "%s = %d AND %s = %d", 
      Contract.Entry.FILE_TYPE, 
      fileType, 
      Contract.Entry.UPLOAD_STATUS, 
      STATUS_CREATED 
    ); 

    int success = mDatabase.update(
      Contract.Entry.TABLE_NAME, 
      cv, 
      whereClause, 
      null 
    ); 

    Log.e(TAG, "success=" + success); 

} 

Erstellung von Tisch und Spalten ist:

public class DbHelper extends SQLiteOpenHelper { 
    public static final int DATABASE_VERSION = 1; 
    public static final String DATABASE_NAME = "cache.db"; 


    private DbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String table = "CREATE TABLE " + Contract.Entry.TABLE_NAME + " (" + 
      Contract.Entry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + 
      Contract.Entry.UPLOAD_STATUS + " INTEGER, " + 
      Contract.Entry.FILE_TYPE + " INTEGER " + ");" 

     db.execSQL(table); 
    } 

    @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + Contract.Entry.TABLE_NAME); 
     onCreate(db); 
    } 
} 

public final class Contract { 

    public Contract() {} 

    public static abstract class Entry implements BaseColumns { 
    public static final String TABLE_NAME = "files"; 
    public static final String UPLOAD_STATUS = "uploadStatus"; 
    public static final String FILE_TYPE = "fileType"; 
    } 
} 

Dieser Code funktioniert nicht und ich bin halten success=0 immer nach dem Ausführen der Abfrage. Es ist irgendwie komisch, denn bis gestern die where-Klausel mit nur einem Argument war, und es funktionierte also:

String whereClause = String.format(
      Locale.US, 
      "%s = %d", 
      Contract.Entry.UPLOAD_STATUS, 
      STATUS_CREATED 
    ); 

Edit: auch versucht, dies:

String whereClause = Contract.Entry.FILE_TYPE + " = ? AND " + Contract.Entry.UPLOAD_STATUS + " = ?"; 
    String[] whereArgs = new String[] {String.valueOf(fileType), String.valueOf(STATUS_CREATED)}; 
    int success = mDatabase.update(
      Contract.Entry.TABLE_NAME, 
      cv, 
      whereClause, 
      whereArgs 
    ); 

Grundsätzlich würde Ich mag alle aktualisieren Zeilen, deren Status erstellt wurde. Für ein paar Stunden fand hier keine Lösung in SO. und google.

Irgendwelche Ideen? Dank

+0

Ist 'Log.e (TAG„Erfolg =“+ a)' tatsächlich in Ihrem Code oder das eine ist Tippfehler? Sollte das nicht Log.e (TAG, Erfolg = "+ Erfolg") sein? – Cheticamp

+0

Ja, es ist ein Tippfehler :) – sharonooo

+1

Die offensichtliche Antwort ist, dass keine Zeile mit dem WHERE-Filter übereinstimmt. –

Antwort

-1

ich recon es in diesem Teil ist:

"%s = %d AND %s = %d" 

try this: (sie alle brauchen String sein tho zu arbeiten)

"%1$s = %2$s AND %3$s = %4$s" 
-1

Alles in Ordnung aussieht. Ich würde überprüfen, ob die Bedingungen mindestens eine Zeile Ihrer Tabelle entsprechen. Sie können auch die folgende Aussage versuchen, die Argumente in üblichen Weise bindet die update Methode:

int success = mDatabase.update(
      Contract.Entry.TABLE_NAME, 
      cv, 
      Contract.Entry.FILE_TYPE + " = ? AND " 
        + Contract.Entry.UPLOAD_STATUS + " = ?", 
      new String[]{String.valueOf(fileType),String.valueOf(STATUS_CREATED)} 
    ); 
+0

Ich habe es gerade getan und es funktioniert immer noch nicht .. Wenn ich nur ein Argument in whereClause (Contract.Entry.UPLOAD_STATUS + "=?") Verwende, aktualisiert es die Tabelle .. komisch ... – sharonooo

+0

Es ist rätselhaft . Sind Sie absolut sicher, dass Ihre Bedingungen von mindestens einer Reihe erfüllt werden? Haben Sie versucht, die Anweisung in sqlite3 auszuführen, um zu sehen, ob Sie die Tabelle direkt aktualisieren können? – Cheticamp

+0

Ja bin ich sicher. Mein Gerät ist nicht verwurzelt, also kann ich es nicht mit sqlite3 überprüfen, aber alle Protokolle scheinen gut auszusehen. – sharonooo

Verwandte Themen