2017-06-15 13 views
0

SQLiteDatabaseを更新しようとしていますが、何らかの理由での更新が常に失敗し、0(行が更新されます)が返されます。Android SQLiteDatabase WHERE文が壊れて更新

削除した場合文字列の選択= null;、すべての行が更新されますが、行を更新したいだけですどこに?と私はeIdを提供します。 ContentValuesの値はすべて正しく、nullではありません。今、私の脳を何時間も動かしています。これで目の新鮮なセットが役立つでしょう、事前に感謝!

注:propertyItemはOKで、私のフォームから来るすべての値が正しいです。選択変数を使用すると、問題が更新時に破損します。

/// COLUMN_NAME_EID == "eId" 
public int updatePropertyItem (PropertyItem propertyItem) { 
    SQLiteDatabase db = mDbHelper.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    if (propertyItem.title != null)values.put(DatabaseContract.DataEntry.COLUMN_NAME_TITLE, propertyItem.title); 
    if (propertyItem.category != null) values.put(DatabaseContract.DataEntry.COLUMN_NAME_CATEGORY, propertyItem.category); 
    if (propertyItem.serial != null) values.put(DatabaseContract.DataEntry.COLUMN_NAME_SERIAL, propertyItem.serial); 
    if (propertyItem.note != null) values.put(DatabaseContract.DataEntry.COLUMN_NAME_NOTE, propertyItem.note); 
    if (propertyItem.purchaseDate != null) values.put(DatabaseContract.DataEntry.COLUMN_NAME_PURCHASE_DATE, propertyItem.purchaseDate); 
    if (propertyItem.currentValue != null) values.put(DatabaseContract.DataEntry.COLUMN_NAME_CURRENT_VALUE, propertyItem.currentValue); 
    if (propertyItem.replacementValue != null) values.put(DatabaseContract.DataEntry.COLUMN_NAME_REPLACE_VALUE, propertyItem.replacementValue); 
    if (propertyItem.store != null) values.put(DatabaseContract.DataEntry.COLUMN_NAME_STORE, propertyItem.store); 
    values.put(DatabaseContract.DataEntry.COLUMN_NAME_WARRANTY, propertyItem.warranty); 
    values.put(DatabaseContract.DataEntry.COLUMN_NAME_FAVORITE, propertyItem.favorite); 

    String selection = DatabaseContract.DataEntry.COLUMN_NAME_EID + " = ? "; 
    String[] selectionArgs = new String[] { String.valueOf(propertyItem.eId) }; 

    int rowsUpdated = db.update(DatabaseContract.DataEntry.TABLE_NAME, values, selection, selectionArgs); 

    db.close(); 
    return rowsUpdated; 
} 
+0

あなたは 'int rowsUpdated = db.update(DatabaseContract.DataEntry .TABLE_NAME、values、DatabaseContract.DataEntry.COLUMN_NAME_EID + "=" + propertyItem.eId、null) '? –

+0

提供されたeIdでデータベースに登録されているレジスタがありますか? – AlexTa

+0

私はDatabaseContract.DataEntry.COLUMN_NAME_EID列のデータ型を知っているかもしれませんか? –

答えて

0

将来的にあなただけの使用where句を拡張する必要がある場合は selection = DatabaseContract.DataEntry.COLUMN_NAME_EID + "=" + propertyItem.eId;を設定し、その後update

のための最後の引数としてnullを渡すことによってhere

を示唆されたものを試みることができますStringBuilder

+0

selectionArgsをnullとして渡してみましたが、そこには運がありません。 – WrightsCS

関連する問題