我正在尝试查看哪些实现更适合在 Android 应用程序中访问 sqlite 数据库
实施1
使用扩展 SqliteOpenHelper 的 DatabaseHelper 类并使用单例模式。在极少数情况下,我确实会因为数据库关闭而看到崩溃。虽然有点烦人,但我让他们通过只是因为它在宏伟的计划和我拥有的项目数量上是次要的。
public class DBHelper extends SQLiteOpenHelper {
private static DBHelper instance;
private final String CREATE_HEALTH_DATA_TABLE = "CREATE TABLE IF NOT EXISTS my_table ( "
+ BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
+ MT_FIELD_NAME + " TEXT NOT NULL );";
private DBHelper getInstance(Context c) {
if (instance == null) {
instance = new DBHelper(c);
}
return instance;
}
private DBHelper(Context c) {
super(c, "my_database.sqlite", null, 0);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}
实施 2
实现这一点的另一种方法是将帮助程序类创建为 Content Provider 类中的静态内部类。这就是示例中记事本示例中的操作方式。
public class DataProvider extends ContentProvider {
/*..Content provider implementation only dbhelper variable and onCreate are shown */
private MTDBHelper dbHelper;
@Override
public boolean onCreate() {
dbHelper = new DBHelper(getContext());
return true;
}
private static class DBHelper extends SqliteOpenHelper {
/// Implementation without making it a singleton
}
}
其中哪一个是更好或标准的事情方式,为什么。我猜这是第二种方法,因为它是一个内部私有类,但希望获得专家意见。
如果这很重要,我总是使用内容提供者。
谢谢