Android:如何使用非字符串选择args查询SQLiteDatabase?

时间:2014-01-03 20:01:33

标签: android sql select sqlite

使用非SQLiteDatabase类型的选择参数查询String是否有直接的方法?

特别是:如果arg是byte[]类型?

我能找到的最接近的是SQLiteDatabase.compileStatement(),它会返回SQLiteStatement,您可以拨打bindBlob等。遗憾的是SQLiteStatement不适合查询,因为它不会返回游标。

SQLiteCursor看起来很有希望,但我无法弄清楚如何使用它。

2 个答案:

答案 0 :(得分:7)

这是Android数据库API中的设计错误。

queryrawQuery只接受字符串参数。 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);