Home » Android » sqlite LIKE problem in android

sqlite LIKE problem in android

Posted by: admin April 23, 2020 Leave a comment

Questions:

Hello i’ve spent almost 2 hours trying to figure out why the LIKE statement doesn’t work and i only get this error: 03-03 11:31:01.770: ERROR/AndroidRuntime(11767): Caused by: android.database.sqlite.SQLiteException: bind or column index out of range: handle 0x89d9f8

In SQLiteManager it works perfectly like this: SELECT Word FROM Sign WHERE Word LIKE 'he%';
But when i try to do it from java it won’t work.
Here’s is my query, i’ve tried in a lot of ways with no luck:

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

Any ideas? i’m i doing it wrong or is there a bug?

Thanks for your time.

How to&Answers:

I think you shouldn’t use selArgs for LIKE such a way. You may try this:

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

EDIT:

OK, if you want be safe from SQL injections, don’t use above solution, use this:

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

Answer:

The solution is actually very easy. Just include the % inside your selectionArgs.

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

Answer:

This is how I did:

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

Answer:

Another — perhaps cleaner — solution is to use the || operator as described here: Sqlite binding within string literal