Java SQLiteStatement为什么没有用于SELECT语句的方法-任何解决方法,以及为什么没有线程安全

Java SQLiteStatement为什么没有用于SELECT语句的方法-任何解决方法,以及为什么没有线程安全,java,android,sqlite,Java,Android,Sqlite,您知道如何预编译返回游标的SELECT语句并多次使用它吗(我99%确定sqlite是可行的,因为java桌面驱动程序允许使用返回游标的SELECT语句进行预编译)?不幸的是,作为源代码,我不能使用QueryBuilder,而只能使用纯SQL字符串类型的SELECT语句(带?for参数)。由于效率的原因,预编译会非常好 另外,在实践中,SQLiteStatement不是线程安全的意味着什么?如何将其替换为线程安全且高效的(预编译)?我不清楚预编译带有可替换参数的SELECT(占位符)是否比使用SQ

您知道如何预编译返回游标的SELECT语句并多次使用它吗(我99%确定sqlite是可行的,因为java桌面驱动程序允许使用返回游标的SELECT语句进行预编译)?不幸的是,作为源代码,我不能使用QueryBuilder,而只能使用纯SQL字符串类型的SELECT语句(带?for参数)。由于效率的原因,预编译会非常好


另外,在实践中,SQLiteStatement不是线程安全的意味着什么?如何将其替换为线程安全且高效的(预编译)?

我不清楚预编译带有可替换参数的SELECT(占位符)是否比使用SQLiteDatabase.query()发出查询更高效。是什么导致你认为你需要编译这个声明

要预编译语句,请使用:

不幸的是,不可能从这样的预编译语句返回游标。 如果要获取多个行或列,必须使用
query
rawQuery


请注意SQLite相当快;您不应该费心优化语句编译,除非您实际测量到它是应用程序中的瓶颈。

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


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

我想知道是否有任何方法可以从sqlite命令行预编译sqlite语句?也许这将是一个方向。。。但不幸的是,我无法找到任何sqlite本机命令进行预编译:(重新运行到线程安全问题-如果我有两个到同一数据库的不同连接,并且我将使用SQLiteStatement,那么这是否安全(在多线程程序中)?如果您有两个不同的
SQLiteStatement
实例,它应该可以正常工作。是的,我注意到对于简单的查询,但我需要将它用于返回游标的非常复杂的语句。这里我的问题开始了…对于预编译语句,没有游标返回函数。如果您只使用同一个SELECT一次,可能没有区别,甚至使用预编译语句也需要更多的时间。如果您使用类似的select ex.1000次,每1秒使用不同的参数(?),则会有所不同。
SQLiteStatement stmt = db.compileStatement("SELECT X FROM Y WHERE Z = ?");
...
stmt.bindString(1, "foo");
String x = stmt.simpleQueryForString();