gpt4 book ai didi

java - sqlite中的更新方法没有抛出异常?

转载 作者:行者123 更新时间:2023-12-01 14:43:41 39 4
gpt4 key购买 nike

我正在从网络获取有关项目的信息,并且希望我的应用程序检查某些行是否存在。如果它们确实存在,那么应用程序应该更新这些行,否则它应该创建新行:

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 子句有什么想法吗?

最佳答案

However, I'm running into a problem: even if the row doesn't exist it doesn't throw Exception. Any ideas as to why it's not triggering the catch clause when the rows already exist?

原因是execSQL()仅在 SQL 字符串无效的情况下抛出 SQLException。但您的问题是,如果行不存在,则不会应用 UPDATE 语句,但这并不意味着 SQL 字符串不正确。

解决方案是使用例如API方法update()返回受影响的行数,如果返回 0,只需执行 INSERT

伪代码:

int rowsAffected = db.update("table", values, "id = ?", 
new String[] {String.valueOf(thisId)});
if (rowsAffected == 0) {
// perform insert
}

关于java - sqlite中的更新方法没有抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15683622/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com