Android SQLite 查询返回包含特定文本的行
Posted
技术标签:
【中文标题】Android SQLite 查询返回包含特定文本的行【英文标题】:Android SQLite query to return rows that contains certain text 【发布时间】:2020-06-02 19:46:19 【问题描述】:我需要对我的本地数据库进行一个 sqlite 查询,该查询返回一个表的所有行,该表在一列中包含某个字符串。问题是我只有那个字符串的一部分。
ID COLUMN1 COLUMN2 COLUMN3
1 myString11111 timestamp some_value
2. myString22222 timestamp some_value
所以在上面的例子中我只知道myString
这只是COLUMN1 的一部分内容。
到目前为止,这是我尝试过的:
String myQuery = "select * from " + MY_TABLE + " where " + COLUMN1 + " LIKE ? " + "' " + myString + " '";
使用此查询会引发异常
android.database.sqlite.SQLiteException: near "' foo '": syntax error (code 1): , while compiling: select * from my_table where COLUMN1 LIKE ? ' foo '
有谁知道如果只知道部分内容可以检索行吗? 提前谢谢!
【问题讨论】:
【参考方案1】:由于您使用?
占位符作为参数,因此无需连接它们。您可以在 rawQuery()
方法的第二个参数中传递它们:
String myQuery = "select * from " + MY_TABLE + " where " + COLUMN1 + " LIKE '%' || ? || '%'";
Cursor c = db.rawQuery(myQuery, new String[] myString);
其中db
是SQLiteDatabase
的一个实例。
该查询将返回列COLUMN1
中包含字符串myString
值的所有行。
你可以用函数INSTR()
代替运算符LIKE
做同样的事情:
String myQuery = "select * from " + MY_TABLE + " where instr(" + COLUMN1 + ", ?)";
【讨论】:
以上是关于Android SQLite 查询返回包含特定文本的行的主要内容,如果未能解决你的问题,请参考以下文章
如何在 sqlite 中查询一个 fts 表以查找一个匹配的列和另一个不匹配特定查询的列?
Android Sqlite 数据库 db.exec() 在 SQL 文本中返回语法错误