2011-05-09 63 views
8

我有一個rawQuery()與以下類似這樣的SQL字符串:安卓:SQL rawQuery用通配符(%)

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

,但現在我必須包括在我的搜索通配符,所以我的查詢看起來是像這樣:

SELECT列FROM表WHERE列LIKE '搜索字符串%'

但是,當查詢包含單引號以下SQLite的例外是拋出:android.database.sqlite.SQLiteException: bind or column index out of range

如何在帶有通配符元素的SQL查詢中使用selectionArgs運行rawQuery?

回答

23

你必須追加%到selectionArgs兩個本身:

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

注:在searchString串因此%_作爲通配符仍然有效!

+0

感謝+1短期和正確的答案。 – Shraddha 2012-05-23 12:44:05

17

Sqlite框架自動將單引號放在?字符內部。

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

就是這樣。

0

布拉德·海恩的和Mannaz的解決方案並沒有爲我工作,但這並:

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