gpt4 book ai didi

android - sqlite3 使用 "WHERE column IN (?)"删除多行

转载 作者:行者123 更新时间:2023-12-05 00:14:21 25 4
gpt4 key购买 nike

我正在尝试使用单个命令删除多行:

String[] args = {"1143997,1144373,1144375,1144383,1144385,1144389"};
int n;
n = db.delete("mytable", "recno IN (?)", args);
Log.d(TAG, "Deleted " + n + " rows");

但它不起作用。也没有
db.execSQL("DELETE FROM mytable WHERE recno IN (?)", args);

但是如果我使用 adb pull 获取数据库文件,从命令行运行 sqlite3,然后键入
DELETE FROM mytable WHERE recno in (1143997,1144373,1144375,1144383,1144385,1144389);

它工作得很好。知道我做错了什么吗?

最佳答案

您需要n逗号分隔 ?对于 n论据。尝试类似:

db.execSQL("DELETE FROM mytable WHERE recno IN (?,?,?,...)", args);

你需要一个 ?根据 argumentargs应该是参数数组,而不是字符串。它应该像
String args[] = {arg1, arg2, arg3, ...};

您可以做的是以编程方式创建 ?根据您的参数数量。实现这个功能。
/**
* Function to create the argument "?,?,?,.." string
*
* @param len The length of array of arguments
*/
String makePlaceholders(int len) {
StringBuilder sb = new StringBuilder(len * 2 - 1);
sb.append("?");
for (int i = 1; i < len; i++) {
sb.append(",?");
}
return sb.toString();
}

然后只需将您的 IN 子句查询设为:
db.execSQL("DELETE FROM mytable WHERE recno IN (" + makePlaceholders(args.length()) + ")", args);

这应该很适合您的目的。希望这可以帮助!

关于android - sqlite3 使用 "WHERE column IN (?)"删除多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35073548/

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