使用非SQLiteDatabase
类型的选择参数查询String
是否有直接的方法?
特别是:如果arg是byte[]
类型?
我能找到的最接近的是SQLiteDatabase.compileStatement()
,它会返回SQLiteStatement
,您可以拨打bindBlob
等。遗憾的是SQLiteStatement
不适合查询,因为它不会返回游标。
SQLiteCursor
看起来很有希望,但我无法弄清楚如何使用它。
答案 0 :(得分:7)
这是Android数据库API中的设计错误。
query
和rawQuery
只接受字符串参数。
execSQL
接受任何Object
参数,但不返回结果。
SQLiteStatement
接受任何类型的参数,但只允许返回单个值的查询。
您可以做的是忽略参数,并手动将blob格式化为blob literals:
cursor = db.rawQuery("SELECT a FROM b WHERE c = x'112233'", null);
答案 1 :(得分:2)
你也可以尝试
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);