【问题标题】:Sqlite opened connection for the lifetime of the appSqlite 在应用程序的生命周期内打开连接
【发布时间】:2020-11-04 17:10:36
【问题描述】:

我正在构建一个移动应用程序,我使用 SQLite 作为数据存储...

我有两种方法可以在我的移动应用中执行 sql-query

首先在应用加载时打开与数据库的连接并在应用的生命周期内使用它,并在应用关闭时关闭它。

第二次为每个查询执行打开一个连接。

速度可靠性方面哪个更好

【问题讨论】:

  • 前者快得多。
  • @Shawn 为什么成功的几率很小?

标签: android sql sqlite


【解决方案1】:

除了推荐使用Room,我推荐使用SQLiteOpenHelper。这是如何处理这个问题的完美实现。它会打开一次数据库并在整个实时期间使用此实例。助手甚至可以识别实例何时关闭并为您重新打开它:

拥有一个 SQL Helper 实例,并使其可用于所有 ViewModel(或控制器或其他任何东西)。 例如,您可以在 MainApp(如果您使用多个活动)或 MainActivity(如果您只使用一个)中有一个静态引用,然后只需通过 MainActivity.getDbHelper() 访问它。

您可以在需要访问的地方致电

db = dbHelper.getReadableDatabase()
// or
db = dbHelper.getWriteableDatabase()

通过 query() 获取光标或使用 exec() 修改数据库


更新:

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "dbName.db";


    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_YOUR_TABLE_STRING);
    }
}

【讨论】:

  • 感谢您的回答...拥有单个数据库实例 ||连接可靠吗?
  • 这是绝对可靠的,因为 SQLiteOpenHelper 正是为了处理这个问题而设计的。因此,您拥有助手的单一实例,助手为您提供 db-instance
  • 打开数据库的成本很高,因此助手会小心。如果你查看它的实现,它也有一个 db-instance
  • @HendEl-Sahli 如果这对您有帮助,请考虑接受答案以帮助其他人也找到答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多