【发布时间】:2020-03-29 17:57:15
【问题描述】:
我在查找有关此问题的任何信息时遇到了一些麻烦,但这似乎是 SQLite 的限制。
考虑一个简单的words 表,它有两个字段,_id(整数)和word(文本)。以下查询有效并返回预期结果(所有单词不超过 12 个字符):
SELECT * FROM words WHERE LENGTH(word) <= 12;
但是,如果此字符限制需要是动态的并作为参数,则查询将不再有效。 它返回表的所有行:
String query = "SELECT * FROM words WHERE LENGTH(word) <= ?";
Cursor cursor = database.rawQuery(query, new String[]{ Integer.toString(12) });
我也尝试选择长度作为新列,然后将条件应用于该列,但结果相同:
String query = "SELECT w.*, LENGTH(w.word) AS word_length FROM words w WHERE word_length <= ?";
Cursor cursor = database.rawQuery(query, new String[]{ Integer.toString(12) });
我唯一的选择是之后只过滤查询结果吗?为什么普通 INT 列上的参数化条件可以工作,但 LENGTH() 上却不行? (例如WHERE _id < ? 工作正常)
【问题讨论】:
标签: java android sqlite android-sqlite