android 数据库实例,android – 数据库全局实例

当我刚开始使用Android时,这对我来说是一个问题,因为网上没有很多教程描述如何正确地允许在整个应用程序中访问您的数据库(不要问我原因).这里有一些展示三种可能方法的示例代码.

方法#1:继承`Application`

如果您知道您的应用程序不会非常复杂(例如,如果您知道您最终只有一个Application类的子类),那么您可以创建Application的子类并让您的主Activity扩展它.这可确保数据库的一个实例在整个应用程序的整个生命周期中运行.

public class MainApplication extends Application {

/**

* see NotePad tutorial for an example implementation of DataDbAdapter

*/

private static DataDbAdapter mDbHelper;

/**

* create the database helper when the application is launched

*/

@Override

public void onCreate() {

mDbHelper = new DataDbAdapter(this);

mDbHelper.open();

}

/**

* close the database helper when the application terminates.

*/

@Override

public void onTerminate() {

mDbHelper.close();

mDbHelper = null;

}

public static DataDbAdapter getDatabaseHelper() {

return mDbHelper;

}

}

方法#2:让`SQLiteOpenHelper`成为静态数据成员

这不是完整的实现,但它应该让您对如何正确设计DatabaseHelper类有所了解.静态工厂方法确保任何时候只存在一个DatabaseHelper实例.

/**

* create custom DatabaseHelper class that extends SQLiteOpenHelper

*/

public class DatabaseHelper extends SQLiteOpenHelper {

private static DatabaseHelper mInstance = null;

private static final String DATABASE_NAME = "databaseName";

private static final String DATABASE_TABLE = "tableName";

private static final int DATABASE_VERSION = 1;

private Context mCxt;

public static DatabaseHelper getInstance(Context ctx) {

/**

* use the application context as suggested by CommonsWare.

* this will ensure that you dont accidentally leak an Activitys

* context (see this article for more information:

* http://developer.android.com/resources/articles/avoiding-memory-leaks.html)

*/

if (mInstance == null) {

mInstance = new DatabaseHelper(ctx.getApplicationContext());

}

return mInstance;

}

/**

* constructor should be private to prevent direct instantiation.

* make call to static factory method "getInstance()" instead.

*/

private DatabaseHelper(Context ctx) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);

this.mCtx = ctx;

}

}

方法#3:使用`ContentProvider`抽象SQLite数据库

这是我建议的方法.首先,新的LoaderManager类在很大程度上依赖于ContentProviders,因此如果您希望Activity或Fragment实现LoaderManager.LoaderCallbacks< Cursor> (我建议你利用它,这很神奇!),你需要为你的应用程序实现一个ContentProvider.此外,您不必担心使用ContentProviders创建Singleton数据库帮助程序.只需从Activity中调用getContentResolver(),系统就会为您处理所有事情(换句话说,不需要设计Singleton模式来防止创建多个实例).

希望有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值