android中的sqlite LIKE问题

mad*_*erz 30 android

您好我花了将近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 0x89d9f8

在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);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我做错了还是有错误?

谢谢你的时间.

Jon*_*ona 59

解决方案实际上非常简单.只需在selectionArgs中包含%.

String []selectionArgs = {name + "%"});
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用。这个解决方案比 Olsavage 的答案更好,因为它不容易受到 SQL 注入的影响。 (2认同)

Ols*_*age 35

我认为你不应该像这样使用selArgs.你可以试试这个:

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

编辑:

好的,如果你想从SQL注入安全,不要使用上面的解决方案,使用这个:

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

  • 那么SQL注入呢?乔纳斯的回答似乎更好. (6认同)
  • 我想,你就是不能用?用引号,就像你做的"Word LIKE'?%'". (2认同)
  • 请不要使用这个'解决方案'.它容易受到SQL注入攻击.有关一个很好的例子,请参见http://xkcd.com/327/. (2认同)

Sar*_*oev 7

这就是我做的:

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