Sqlite数据库连接在实时使用时丢失了应用程序

时间:2014-03-26 13:04:21

标签: android sqlite sqliteopenhelper

我的数据库类正在扩展 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()。这是可取的吗?

有人可以解决问题的正确行动吗?

0 个答案:

没有答案