【问题标题】:Android: SQL rawQuery with wildcard (%)Android:带通配符的 SQL rawQuery (%)
【发布时间】:2011-05-09 09:19:34
【问题描述】:

我有一个rawQuery(),下面的 sql 字符串与此类似:

selectionArgs = new String[] { searchString };
Cursor c = db.rawQuery("SELECT column FROM table WHERE column=?", selectionArgs);

但现在我必须在搜索中包含通配符,所以我的查询看起来像这样:

SELECT column FROM table WHERE column LIKE 'searchstring%'

但是当查询包含单引号时,会抛出以下 SQLite 异常:android.database.sqlite.SQLiteException: bind or column index out of range

如何在带有通配符元素的 SQL 查询中运行带有 selectionArgs 的 rawQuery?

【问题讨论】:

    标签: java android sqlite


    【解决方案1】:

    您必须将 % 附加到 selectionArgs 本身:

    selectionArgs = new String[] { searchString + "%" };
    Cursor c = db.rawQuery("SELECT column FROM table WHERE column=?", selectionArgs);
    

    注意:因此searchString 字符串中的%_ 仍可用作通配符!

    【讨论】:

      【解决方案2】:

      Sqlite 框架会自动将单引号放在 ?性格内向。

      String [] selectionArgs = {searchString + "%"};
      Cursor c;
      // Wrap the next line in try-catch
      c = db.rawQuery("SELECT column FROM table WHERE like ?", selectionArgs);
      

      就是这样。

      【讨论】:

      • 是,但不是通配符
      【解决方案3】:

      Brad Hein 和 Mannaz 的解决方案对我不起作用,但这样做:

      String query = "SELECT column FROM table WHERE column=%s";
      String q = String.format(query, "\""+searchString + "%\"");
      Cursor c = db.rawQuery(q, null);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多