Android:带有通配符的SQL rawQuery(%)

时间:2011-05-09 09:19:35

标签: java android sqlite

我正在使用rawQuery()以下类似于此的sql字符串:

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

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

SELECT列FROM表WHERE列LIKE'searchstring%'

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

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

3 个答案:

答案 0 :(得分:24)

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

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

注意:%字符串中的_searchString仍然可用作通配符!

答案 1 :(得分:19)

Sqlite框架会自动将单引号放在?内部人物。

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

就是这样。

答案 2 :(得分:0)

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

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