我有点困惑如何正确地做到这一点。这是我的DatabaseHelper类:
public class DatabaseHelper extends SQLiteOpenHelper {
private static DatabaseHelper mInstance = null;
private static final String DB_NAME = "database.db";
private static final int DB_VERSION = 1;
private Context mContext;
public static DatabaseHelper getInstance(Context context) {
if (mInstance == null) {
mInstance = new DatabaseHelper(context.getApplicationContext());
}
return mInstance;
}
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
mContext = context;
}
...
假设这是正确的,这是处理查询类的正确方法:
public class DatabaseProcessor {
private SQLiteDatabase mDatabase;
private DatabaseHelper mSQLHelper;
private Context mContext;
public DatabaseProcessor(Context context) {
mContext = context;
mSQLHelper = new DatabaseHelper(mContext);
}
private void open() throws SQLException {
mDatabase = mSQLHelper.getWritableDatabase();
}
private void close() {
mDatabase.close();
}
public void insertSomethingIntoDb(String key) {
ContentValues values = new ContentValues();
values.put("some_column_name", name);
open();
mDatabase.insert("some_table_name", null, values);
close();
}
...
如果这是正确的,我如何在任何地方从代码中的其他位置(如Activity,Fragment等)正确调用db方法。
答案 0 :(得分:2)
您应该使用DatabaseHelper
构造函数private
并使用getInstance
方法创建此类的实例。例如:mSQLHelper = DatamabseHelper.getInstance(context)
。
要调用此类的方法,您可以执行以下操作。
DatabaseHelper.getInstance(context).someFunction(...);
要使用任何DatabaseProcessor
函数,您可以执行以下操作:
new DatabaseProcessor(context).insertSomethingIntoDb(...);
请记住,这个单例方法有一些问题,对于初学者来说,它不支持多线程,没有机制来确保如果两个线程同时请求一个实例,只有一个实例将是创建