SQLiteStatement为什么没有SELECT语句的方法 - 任何解决方法加上为什么没有线程安全

时间:2013-10-09 22:21:43

标签: java android sqlite

你知道任何解决方法如何预编译SELECT语句返回Cursor并多次使用它(我99%确定它可以用sqlite作为java桌面驱动程序允许使用SELECT返回游标进行预编译)?不幸的是作为源我不能使用QueryBuilder而是使用纯SQL String类型的SELECT语句(带?for参数)。由于效率的原因,预编译会很好。

另外,在实践中,SQLiteStatement不是线程安全的意味着什么?我怎样才能将它替换为线程安全高效(预编译)?

3 个答案:

答案 0 :(得分:1)

要预编译语句,请使用compileStatement function

SQLiteStatement stmt = db.compileStatement("SELECT X FROM Y WHERE Z = ?");
...
stmt.bindString(1, "foo");
String x = stmt.simpleQueryForString();

不幸的是,无法从这样的预编译语句返回游标。 如果您想获得多个行或列,则必须使用queryrawQuery

请注意,SQLite非常快;你不应该费心优化语句编译,除非你实际上把它测量成你应用程序的瓶颈。

答案 1 :(得分:0)

我不清楚使用可替换参数(?占位符)预编译SELECT比使用SQLiteDatabase.query()发出查询更有效。什么导致相信你需要编译声明?

答案 2 :(得分:0)

我认为rawQuery()可能在内部预编译语句。

与支持更多数据类型的SQLiteStatement相比,参数必须转换为String。