我正在尝试在 android 中执行 sqlite rawquery。我从我的设备上下载了数据库,并使用“sqlite 查询浏览器”Windows 程序试错,直到我得到我想要的。现在的问题是我有我需要的字符串,我似乎无法将参数输入其中,我怀疑它只是某种字符串转义缺陷。
我要执行的查询是
SELECT lis.name from listItemSuggestion lis LEFT JOIN listItem li ON lis.name = li.name WHERE li.name is NULL AND lis.name LIKE '%a%'
其中 '%a%' 中的 a 需要是可变参数。我在代码中所做的是这样的:
getReadableDatabase().rawQuery(
String.format("SELECT lis.%s from %s lis LEFT JOIN %s li ON lis.%s = li.%s WHERE li.%s is NULL AND lis.%s LIKE '%%?%%';",
ListItemSuggestion.COLUMN_NAME,
ListItemSuggestion.TABLE_NAME,
ListItem.TABLE_NAME,
ListItemSuggestion.COLUMN_NAME,
ListItem.COLUMN_NAME,
ListItem.COLUMN_NAME,
ListItemSuggestion.COLUMN_NAME
),
new String[]{filter}
);
合同类是:
import android.provider.BaseColumns;
public final class ListItem {
private ListItem(){}
public static class ListItemEntry implements BaseColumns
{
public static final String TABLE_NAME = "listItem";
public static final String COLUMN_DONE = "done";
public static final String COLUMN_NAME = "name";
public static final String COLUMN_COUNT = "count";
public static final String COLUMN_TIMESTAMP = "timestamp";
}
}
import android.provider.BaseColumns;
public final class ListItemSuggestion {
private ListItemSuggestion(){}
public static class ListItemSuggestionEntry implements BaseColumns
{
public static final String TABLE_NAME = "listItemSuggestion";
public static final String COLUMN_NAME = "name";
}
}
我得到的错误是:
无法在索引 1 处绑定参数,因为索引超出范围。该语句有 0 个参数。(这意味着它没有在查询中找到“?”,对吧?虽然有一个......,顺便说一句,“过滤器”是一个方法参数)
顺便说一句:该查询的目的是为输入提供建议,其中列表项是动态的(= 在列表/表上,它们可以随时从中删除),而每个项目也会静默创建一个建议项(在另一个表中)实际项目被删除时不会被删除。where 子句应获取与当前文本输入状态匹配的建议,并排除列表中已存在的项目。
牛魔王的故事
MYYA
不负相思意
相关分类