gpt4 book ai didi

java - sqlite rawQuery where in 子句

转载 作者:行者123 更新时间:2023-11-29 16:29:43 31 4
gpt4 key购买 nike

如何执行下面的查询

select * from regions where field1 in('word1', 'word2')

使用 sqlite rawQuery 方法?

我试过下面的代码:

String[] myArray = new String[]{"word1","word2"};
Cursor cursor = mDb.rawQuery("select * from regions where field1 in(?)", myArray );

但是错误:

Caused by: java.lang.IllegalArgumentException: Cannot bind argument at index 2 because the index is out of range. The statement has 1 parameters.

最佳答案

您将 2 个参数传递给 rawQuery():"word1""word2" 但 sql 语句仅包含 1 个占位符 ?.
将其更改为:

Cursor cursor = mDb.rawQuery("select * from regions where field1 in(?, ?)", myArray );

编辑。
如果你想传递未知数量的参数,那么你必须在 in 中构建逗号分隔的参数,并且只使用 rawQuery() 的第一个参数:

String[] myArray = new String[]{"word1","word2"};
StringBuilder sb = new StringBuilder("'");
for (String word : myArray) {
sb.append(word.replace("'", "''")).append("','");
}
if (sb.length() > 1) {
sb.setLength(sb.length() - 2);
}
Cursor cursor = mDb.rawQuery("select * from regions where field1 in (" + sb.toString() + ")", null);

这不是一个安全的解决方案,您必须正确准备数组的项目,这样它们就不会包含单引号(这就是我使用 replace() 的原因)。

关于java - sqlite rawQuery where in 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57141908/

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