java - SQLiteStatement预编译语句良好实践

标签 java android sqlite

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

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

所以这个问题。是否有任何好的实践,在哪里(在什么时刻,哪个类的什么方法)预编译这些语句以及接下来如何执行它们。

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

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

最佳答案

为了澄清情况,举个例子:

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)吗?

关于java - SQLiteStatement预编译语句良好实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18795404/

相关文章:

java - 如何使用仿射变换在 JPanel 上仅缩放一个对象?

java - 如何在 JasperReports 中指定断字

android - 获取当前位置时在ImageView中画圆 IndoorAtlas SDK

database - SQLite 更新/更新或插入

android - 如何查看bluestacks中存在的SQLite数据库?

c# - 如何使用 SQLite-net 为 SQLite 中的列设置默认值?

java - 避免在 Spring 中创建 session

java - 将 .toBinaryString 转换为其补码

android - android 将 1 个位图覆盖到另一个图像,但没有得到正确的输出

android - 如何始终在 Bottom Sheet 对话框 fragment 中将按钮与屏幕底部对齐