2017-11-01 9 views
-6

私はSQLiteデータベーステーブルを整数値で更新しようとしています。最初のものはテーブルを更新せず、2番目のアプローチはSQLiteExceptionを返します。 updateメソッドを使用して 第一 - 第二アンドロイドでSQLiteデータベースを更新するには?

public void updateBookQty(String quantity,String bookId) 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 

    int updateQty = getQuantity(bookId) - Integer.parseInt(quantity) ; 

    ContentValues values = new ContentValues(); 
    values.put(KEY_QTY,updateQty); 


    try{ 

     db.update(BOOKS_TABLE, values, KEY_BOOK_ID+ " = ?", 
       new String[] { String.valueOf(bookId) }); 

     Log.d("BookUpdate", String.valueOf(updateQty)); 

    }catch (SQLException e) 
    { 
     Log.d("UpdateError",e.toString()); 
    } 

} 

ExecSQLメソッドを使用しては: - :

をSystem.err:android.database.sqlite - ここ

public void updateQty(Integer qty,String bookId) 
{ 
    int originalQty = getQuantity(bookId); 
    int updateQty = originalQty - qty; 
    try{ 
     SQLiteDatabase db = this.getWritableDatabase(); 
     String rawQuery = "update "+BOOKS_TABLE+" set "+KEY_QTY+" = "+updateQty+ " where "+KEY_BOOK_ID+" = "+bookId+" ;" ; 
     db.execSQL(rawQuery); 
     db.close(); 
     Log.v("UpdateQty", "Qty updated"); 
    } 
    catch(Exception ex) 
    { 
     ex.printStackTrace(); 
    } 
} 

私はSQLiteExceptionを取得します。 SQLiteException: "0000169"の近く: 構文エラー(コード1):、コンパイル中:updated books_table set quantity = -10 where book_id = BK 0000169;あなたのIDとして

+0

いけない返すdb.update' 'https://stackoverflow.com/a/17027063/3635454 – pleft

+0

を参照、更新するための' execSQL'を使用し、これを試してください影響を受ける行の数である 'int'。あなたはあなたのケースで '0'を返すと確信していますか?さらに、 'bookId'は文字列なので、' String.valueOf(bookId) 'は' bookId'変数を渡します。 – pleft

+0

@pleft bookIdのString.valueOfを削除しようとしました。はい、私はそれが0を返す影響を受ける行の数を記録しようとしました。あなたはこの問題を引き起こしていると思われますか? – anup

答えて

2

public void updateQty(Integer qty,String bookId) 
{ 
    int originalQty = getQuantity(bookId); 
    int updateQty = originalQty - qty; 
try{ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    String rawQuery = "update " + BOOKS_TABLE + " set " + KEY_QTY + " = " + updateQty + " where " + KEY_BOOK_ID + " = '" + bookId + "';"; 

    db.execSQL(rawQuery); 
    db.close(); 
    Log.v("UpdateQty", "Qty updated"); 
} 
catch(Exception ex) 
{ 
    ex.printStackTrace(); 
} 
} 
+0

ありがとう、これはSQLiteExceptionを解決しました。私は実際にDBが更新されていない理由は間違ったIDを渡していた。 – anup

1

あなたはESP、値を引用しなければならない文字列です。これは、スペースが含まれています

String rawQuery = "update "+BOOKS_TABLE 
    + " set "+KEY_QTY+" = "+updateQty 
    + " where "+KEY_BOOK_ID+" = '"+bookId+"';" ; 
+0

これでエラーは発生しませんが、データベースは更新されません。 – anup

関連する問題