Android Sqlite在应用程序的生命周期内打开了连接

Android Sqlite在应用程序的生命周期内打开了连接,android,sql,sqlite,Android,Sql,Sqlite,我正在构建一个移动应用程序,我使用SQLite作为数据存储 我有两种方法在我的移动应用程序中执行sql查询 首先在应用程序加载时打开与DB的连接,并在应用程序的生命周期内使用它,然后在应用程序关闭时关闭它 第二次每次执行查询时打开一个连接 在速度和可靠性方面,除了建议使用Room,我还建议使用SQLiteOpenHelper。这是如何处理这个问题的完美实现。它打开DB一次,并在livetime中使用此实例。助手甚至可以识别实例何时关闭并为您重新打开: 拥有SQL Helper的单个实例,并使其可

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

我有两种方法在我的移动应用程序中执行sql查询

首先在应用程序加载时打开与DB的连接,并在应用程序的生命周期内使用它,然后在应用程序关闭时关闭它

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


在速度和可靠性方面,除了建议使用
Room
,我还建议使用SQLiteOpenHelper。这是如何处理这个问题的完美实现。它打开DB一次,并在livetime中使用此实例。助手甚至可以识别实例何时关闭并为您重新打开:

拥有SQL Helper的单个实例,并使其可用于所有ViewModels(或控制器或其他任何对象)。 例如,您可以在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);
    }
}

前者远比后者快。@Shawn为什么成功的机会很小?谢谢你的回答。。。拥有一个db实例| |连接是可靠的吗?这是绝对可靠的,因为SQLiteOpenHelper正是为了处理这个问题而设计的。因此,您只有一个帮助程序,帮助程序为您提供数据库实例打开数据库的成本很高,因此帮助程序会负责。如果您研究它的实现,它也有一个数据库-instance@HendEl- Sahli,如果这对你有帮助,请考虑接受答案,帮助别人找到答案。