2011-03-03 82 views
28

你好,我已經花了差不多2個小時,試圖找出爲什麼LIKE語句不工作,我只是得到這個錯誤:03-03 11:31:01.770: ERROR/AndroidRuntime(11767): Caused by: android.database.sqlite.SQLiteException: bind or column index out of range: handle 0x89d9f8SQLite的LIKE問題的Android

在的SQLiteManager它完美的作品是這樣的:SELECT Word FROM Sign WHERE Word LIKE 'he%'; 但是,當我嘗試從java做它不會工作。 這裏是我的查詢,我已經嘗試了很多辦法,沒有運氣:

Cursor cursor = m_db.query(MY_TABLE, new String[] {"rowid","Word"},"Word"+" LIKE '"+" ?"+"%'", new String[]{name}, null, null, null); 

任何想法?我是我做錯了還是有錯誤?

感謝您的時間。

回答

32

我想你不應該像這樣使用selArgs。你可以試試這個:

Cursor cursor = m_db.query(MY_TABLE, new String[] {"rowid","Word"},"Word"+" LIKE '"+name+"%'", null, null, null, null); 

編輯:

OK,如果你想從SQL注入安全,不使用上述方案,使用此:

Cursor cursor = m_db.query(MY_TABLE, new String[] {"rowid","Word"},"Word LIKE '?'", new String[]{name+"%"}, null, null, null); 
+0

這是正確的,它的工作!有沒有解釋爲什麼這種情況發生在LIKE語句中?謝謝你的回答,祝你有美好的一天。 – madcoderz 2011-03-03 11:32:27

+2

我想,你只是不能使用?用引號,就像你做了「Word LIKE」?%'「。 – Olsavage 2011-03-03 11:40:52

+6

那麼SQL注入呢?喬納斯的答案似乎更好。 – James 2013-01-24 18:12:25

56

的解決方案實際上是好簡單。只需在selectionArgs中包含%。

String []selectionArgs = {name + "%"}); 
+1

這適用於我。這個解決方案比Olsavage的答案要好,因爲它不容易受到SQL注入的影響。 – Kowlown 2013-09-28 21:53:20

6

這是我如何做:

String []columns = {"_id", "name"}; 
String []selectionArgs = {name+"%"}; 
db.query(true,"mydb",columns,"name LIKE ?",selectionArgs,null,null,null);