【问题标题】:Android SQLite query to return rows that contains certain textAndroid SQLite 查询返回包含特定文本的行
【发布时间】: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 '

有谁知道如果只知道部分内容可以检索行吗? 提前谢谢!

【问题讨论】:

    标签: java android sqlite android-sqlite android-cursor


    【解决方案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 + ", ?)";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      相关资源
      最近更新 更多