1

我的问题涉及使用 SQLiteDatabase.compileStatement 创建的预编译 SQL 语句。在我首先看到的所有示例中,都有预编译,添加下一个参数,然后执行语句。

但是我的印象是,如果我在开始的某个地方预编译它们一次,然后我多次使用以前的预编译语句只给它们新的参数,那么使用预编译语句是有意义的。

因此问题。有没有什么好的做法,在哪里(在什么时候,哪个类的什么方法)预编译这些语句以及接下来如何执行它们。

我想知道扩展 SQLiteOpenHelper 类(实际上我必须始终扩展它以涵盖 onCreate 和 onUpdate 方法),并首先在构造函数中添加我所有 sql 语句的预编译,然后创建我自己的方法以确保访问我的数据库(=绑定参数并执行语句)。

这是一个好方法吗?如果现在,什么是好的做法?

4

1 回答 1

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 代码,但我相信它给出了我想要实现的一个很好的例子。Simply sql 语句只有在第一次使用时才会被预编译。接下来将其保留以备将来使用。

问题是您如何看待这样的解决方案。

还有一个什么时候可以创建 MySQLStatements 对象?可以在我从 SQLiteOpenHelper 派生的类的构造函数中完成最后一件事吗?但是通过 getWritableDatabase 方法获取 db 是否安全。在 onCreate、onUpdate 方法中,我可以跳过给定的 db 参数并使用之前在构造函数中获得的(通过 getWritableDatabase)吗?

于 2013-09-14T20:31:17.153 回答