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);

其中dbSQLiteDatabase 的一个实例。 该查询将返回列COLUMN1 中包含字符串myString 值的所有行。 你可以用函数INSTR()代替运算符LIKE做同样的事情:

String myQuery = "select * from " +  MY_TABLE + " where instr(" + COLUMN1 + ", ?)";

【讨论】:

以上是关于Android SQLite 查询返回包含特定文本的行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 sqlite 中查询一个 fts 表以查找一个匹配的列和另一个不匹配特定查询的列?

从android数据库sqlite中获取特定数据

验证我的 Sqlite 查询?

Android Sqlite 数据库 db.exec() 在 SQL 文本中返回语法错误

Gridview 根据 Android 中的 SQLITE 状态高亮显示特定项目

怎样对android开发中的sqlite数据库进行模糊查询,并返回一个Cursor