2016-05-19 25 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); 

} 

の作成をし、それが列です:このコードは動作しませんし、私は、クエリを実行した後success=0を得続けるよ

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

。これは、WHERE句は一引数でいたし、それはすなわち働いたので、昨日までのような奇妙な:

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

編集: はまた、この試みた:

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

基本的に私はすべての更新を希望しますステータスが作成された行 数時間の間、ここに解決策が見つかりませんでした。とGoogle。

アイデア? おかげ

+0

'Log.e(TAG、「成功=」+ a)は'実際にあなたのコード内またはこのAはです。打ち間違え?それは 'Log.e(TAG、success =" + success) 'ではありませんか? – Cheticamp

+0

はいそれはタイプミスです。 – sharonooo

+1

明らかな答えは、WHEREフィルタと一致する行がないことです。 –

答えて

-1

私はそれがこの部分にあるリコン:

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

はこれを試してみてください。(彼らはすべてカントーを動作するように文字列である必要が)

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

すべてが順番に見えます。条件がテーブルの少なくとも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 + "=?")で1つの引数を使用している場合は、テーブルを更新します..奇妙な... – sharonooo

+0

それは困惑です。あなたの条件が少なくとも一列で満たされていることは絶対に確信していますか? sqlite3でステートメントを実行しようとしましたが、テーブルを直接更新できるかどうかを確認しましたか? – Cheticamp

+0

はい私は確信しています。私のデバイスはrootになっていないので、sqlite3でチェックすることはできませんが、すべてのログは見栄えが良いようです。 – sharonooo

関連する問題