【发布时间】:2013-02-28 01:53:39
【问题描述】:
我正在尝试看看哪些实现更适合在 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
}
}
其中哪些是更好或标准的处理方式以及原因。我猜这是第二种方法,因为它是一个内部私有类,但希望获得专家意见。
如果这很重要,我总是使用内容提供程序。
谢谢
【问题讨论】:
-
我知道静态内部类的行为方式。我正在寻找一个特定于 Android 实现的答案,它可以帮助我了解在打开/访问/关闭数据库和线程方面的优点/缺点。
标签: android android-contentprovider android-sqlite