我从网上获取有关商品的信息,我希望我的应用检查是否存在某些行。如果它们确实存在,则应用程序应更新这些行,否则应创建新行:
try {
mDb.execSQL("UPDATE ["
+ ParseReciverAddList.tableName
+ "] SET purchased = " + pCheck
+ " WHERE id =" + (thisId));
mDb.execSQL("UPDATE ["
+ ParseReciverAddList.tableName
+ "] SET name = '" + (PName)
+ "' WHERE id =" + (thisId));
mDb.execSQL("UPDATE ["
+ ParseReciverAddList.tableName
+ "] SET quantity = '" + (pQuantity)
+ "' WHERE id =" + (thisId));
Log.d("p", "e");
} catch (Exception e) {
Log.d("p", "ne");
mDb.execSQL("INSERT INTO ["+ParseReciverAddList.tableName+"] VALUES ("+thisId+","+pCheck+", '"+PName+"','"+pQuantity+"');");
}
我想我会尝试更新它,如果它抛出Exception
那么就意味着这些行不存在并且会创建它。
但是,我遇到了一个问题:即使该行不存在,它也不会抛出Exception
。有什么想法,当行已经存在时,它为什么不触发catch
子句?
答案 0 :(得分:1)
然而,我遇到了一个问题:即使该行不存在它 不会抛出异常。任何想法,为什么它不会触发 行已存在时是catch子句吗?
原因是execSQL()
仅在您的SQLException
字符串无效的情况下才会引发SQL
。但是你的问题是,如果行不存在,则不会应用UPDATE
语句,但这并不意味着SQL
字符串不正确。
解决方案是使用API方法update()
来返回受影响的行数,如果它将返回0,则只需执行INSERT
。
<强>伪代码:强>
int rowsAffected = db.update("table", values, "id = ?",
new String[] {String.valueOf(thisId)});
if (rowsAffected == 0) {
// perform insert
}