2016-05-19 2 views
1

Я пытаюсь обновить несколько строк, используя SQLiteDatabase.update на определенной таблице.SQLiteDatabase.update не влияет на строки

Код для выполнения запроса:

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

} 

Создание таблицы и это столбцы:

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"; 
    } 
} 

Этот код не работает, и я продолжаю получать success=0 после выполнения запроса. Это немного странно, потому что до вчерашнего дня, где положение было только с одним аргументом, и она работала, а именно:

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

Edit: пытался Кроме того, это:

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

В основном я хотел бы обновить все строки, в которых создается их статус. За пару часов здесь не найдено решения в SO. и google.

Любые идеи? Благодаря

+0

является 'Log.e (TAG,«успех =»+ а)' фактически в вашем коде или это опечатка? Не должно быть 'Log.e (TAG," success = "+ success)"? – Cheticamp

+0

Да, это опечатка :) – sharonooo

+1

Очевидным ответом является то, что ни одна строка не соответствует фильтру WHERE. –

ответ

-1

Я Recon именно в этой части:

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

попробовать это: (все они должны быть Струнный работать Тхо)

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

Все выглядит в порядке. Я бы дважды проверял, что условия соответствуют хотя бы одному ряду таблицы. Кроме того, можно попробовать следующее заявление, которое связывает аргументы стандартным способом, используя update метод:

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

Я просто сделал это и все еще не работает. Если я использую только один аргумент в whereClause (Contract.Entry.UPLOAD_STATUS + "=?"), Он обновляет таблицу .. weird ... – sharonooo

+0

Это озадачивает , Вы абсолютно уверены, что ваши условия удовлетворяются хотя бы одним рядом? Вы пытались выполнить инструкцию в sqlite3, чтобы узнать, можете ли вы напрямую обновить таблицу? – Cheticamp

+0

Да, я уверен. Мое устройство не внедрено, поэтому я не могу проверить его с помощью sqlite3, но все журналы выглядят хорошо. – sharonooo

Смежные вопросы