我的数据库类正在扩展 SQLiteOpenHelper ,其中包含创建数据库实例和执行查询的所有步骤。
DbAdapter.java
创建要在我的应用程序中使用的数据库实例------
public static DbAdapter getInstance(Context context) {
if (mInstance == null) {
DB_PATH = context.getFilesDir().getParent() + "/databases/";
mInstance = new IDDLDbAdapter(context);
try {
mInstance.createDataBase();
} catch (Exception e) {
e.printStackTrace();
}
}
return mInstance;
}
rawQuery的光标----------
public synchronized Cursor rawQuery(String sql, String[] args) throws SQLException{
if(db == null || !db.isOpen())
this.open();
return db.rawQuery(sql, args);
}
但是,有时数据库适配器不再可用,但仍然没有意识到,因为它正在实时与客户使用应用程序但不是应用程序调试
我有很多类,我使用它来连接和执行查询 -
protected static DbAdapter dbAdapter;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try
{
dbAdapter = DbAdapter.getInstance(activity.getApplicationContext());
}
catch (ClassCastException e)
{
}
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
Button btn = (Button) view.findViewById(R.id.btnClick);
btn.setOnClickListener(new OnClickListener()
{
Cursor cur = dbAdapter.rawQuery("select * from blabla WHERE
Activities='"+ activity + "'", null);
cur.moveToFirst();
}
}
然后我使用Cursor cur继续工作......
这段代码有问题吗?
我对这个问题有三个疑问 -
1)这一行似乎有问题 -
dbAdapter = DbAdapter.getInstance(activity.getApplicationContext());
这是因为有些帖子建议尽可能避免使用getApplicationContext()
。
2)在应用程序空闲时间内,数据库连接器类的对象已完成(没有引用数据库)。
3)我正在获取数据库实例onAttach()
。这是可取的吗?
有人可以解决问题的正确行动吗?