Android: how to query SQLiteDatabase with non-string selection args?

android, select, sql, sqlite

Solution

This is a design bug in the Android database API.

`query` and `rawQuery` accept only string parameters. `execSQL` accepts any `Object` parameters, but does not return results. `SQLiteStatement` accepts parameters of any type, but allows only queries that return a single value.

What you can do is to ignore parameters, and format the blobs as blob literals by hand:

cursor = db.rawQuery("SELECT a FROM b WHERE c = x'112233'", null);

Problem

Is there a straightforward way to query an `SQLiteDatabase` with selection args that are not `String` types? Particularly: if the arg is a `byte[]` type? The closest thing I can find is `SQLiteDatabase.compileStatement()`, which returns an `SQLiteStatement` you can call `bindBlob` etc. on. Unfortunately `SQLiteStatement` isn't good for querying because it doesn't return a cursor. `SQLiteCursor` looks promising but I can't figure out how to use it.

Original source

Related problems