sqlite中的update方法没有抛出异常?

时间:2013-03-28 13:49:54

标签: java android sqlite exception try-catch

我从网上获取有关商品的信息,我希望我的应用检查是否存在某些行。如果它们确实存在,则应用程序应更新这些行,否则应创建新行:

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子句?

1 个答案:

答案 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
}