【发布时间】:2017-11-01 09:20:33
【问题描述】:
我正在尝试使用整数值更新 SQLite 数据库表。我尝试了 2 种方法,第一种方法不更新表,第二种方法给出 SQLiteException。 第一次使用更新方法:-
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:-
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:-
System.err:android.database.sqlite.SQLiteException:靠近“0000169”: 语法错误(代码 1):,编译时:更新 books_table 集 数量 = -10 其中 book_id = BK 0000169 ;
【问题讨论】:
-
不要使用
execSQL更新,见stackoverflow.com/a/17027063/3635454 -
db.update返回一个int,它是受影响的行数。您确定它在您的情况下返回0吗?此外,由于bookId是一个字符串,因此没有理由这样做:String.valueOf(bookId),只需传递bookId变量 -
@pleft 我尝试为 bookId 删除 String.valueOf。是的,我尝试记录受影响的行数,它返回 0。您认为可能导致此问题的原因是什么。
-
您能否更新您的问题并发布有关数据库表
books_table的一些信息以及您要更新的行?我想您的where子句中可能没有匹配项,这意味着没有book_id值与参数bookId的值相同(BK 0000169)。但是您必须向我们提供更多信息,所以请更新问题 -
@pleft 我传递了错误的要更新的 ID。代码没有问题。
标签: java android sql database sqlite