Reputation: 2268
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.
Upvotes: 7
Views: 1485
Reputation: 782
also you may try
Cursor cs = db.rawQueryWithFactory(new CursorFactory() {
@SuppressLint("NewApi")
@SuppressWarnings("deprecation")
@Override
public Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery,
String editTable, SQLiteQuery query) {
// bind it here!...
query.bindBlob(1, mac);
if (Build.VERSION.SDK_INT < 11) {
return new SQLiteCursor(db, masterQuery, editTable, query);
} else {
return new SQLiteCursor(masterQuery, editTable, query);
}
}
}, query, null, DB_TABLE);
Upvotes: 2
Reputation: 180080
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);
Upvotes: 10