你知道任何解决方法如何预编译SELECT语句返回Cursor并多次使用它(我99%确定它可以用sqlite作为java桌面驱动程序允许使用SELECT返回游标进行预编译)?不幸的是作为源我不能使用QueryBuilder而是使用纯SQL String类型的SELECT语句(带?for参数)。由于效率的原因,预编译会很好。
另外,在实践中,SQLiteStatement不是线程安全的意味着什么?我怎样才能将它替换为线程安全高效(预编译)?
答案 0 :(得分:1)
要预编译语句,请使用compileStatement function:
SQLiteStatement stmt = db.compileStatement("SELECT X FROM Y WHERE Z = ?");
...
stmt.bindString(1, "foo");
String x = stmt.simpleQueryForString();
不幸的是,无法从这样的预编译语句返回游标。
如果您想获得多个行或列,则必须使用query
或rawQuery
。
请注意,SQLite非常快;你不应该费心优化语句编译,除非你实际上把它测量成你应用程序的瓶颈。
答案 1 :(得分:0)
我不清楚使用可替换参数(?占位符)预编译SELECT比使用SQLiteDatabase.query()发出查询更有效。什么导致相信你需要编译声明?
答案 2 :(得分:0)
我认为rawQuery()
可能在内部预编译语句。
与支持更多数据类型的SQLiteStatement
相比,参数必须转换为String。