我的问题涉及使用SQLiteDatabase.compileStatement创建的预编译SQL语句。在我看到的所有示例中,首先是预编译,添加了下一个参数,然后执行该语句。
但是我觉得使用预编译语句是有道理的,如果我在开始时将它们预编译一次,那么我使用以前预编译的语句很多次只给它们新的参数。
这样的问题。有没有好的做法,在哪里(在什么时候,哪个类的哪个方法)预先编译这些语句以及如何执行它们。
我想知道扩展SQLiteOpenHelper类(实际上我必须扩展它以覆盖onCreate和onUpdate方法)并在构造函数中首先添加我的所有sql语句的预编译,然后创建我自己的方法以确保访问到我的数据库(=绑定参数和执行语句旁边)。
这是一个好方法吗?如果现在,有什么好的做法?
答案 0 :(得分:0)
为了澄清情况,举个例子:
public class MySQLStatements
SQLiteDatabase db;
SQLiteStatement recordInsert;
public SQLDatabaseAndroid (SQLiteDatabase db){
this.db=db;
}
public void tableCreateExecute () {
db.execSQL ("CREATE TABLE....");
}
public long recordInsertExecute (par1, par2 etc....) {
// let's precompile sql statement if it hasn't been previously used
recordInsert = (recordInsert == null) ?
recordInsert = db.compileStatement(recordInsert()) : recordInsert;
and next sql part.
上面的部分并不是完全正确的java代码,但我相信它给出了我想要实现的一个很好的例子。简单的sql语句只有在第一次使用时才会预编译。接下来它保留供将来使用。
问题是你如何考虑这样的解决方案。
另一个在什么时候我可以创建MySQLStatements对象?可以在我的类的构造函数中完成从SQLiteOpenHelper派生的最后一件事吗?但是通过getWritableDatabase方法获取db是安全的。在onCreate方法中,onUpdate可以跳过给定的db参数并使用之前得到的构造函数(通过getWritableDatabase)吗?