尝试获取android中可关闭的SQLiteClosable上的引用

尝试获取android中可关闭的SQLiteClosable上的引用,android,Android,大家好,我正在android中创建数据库,我在表中插入一些随机生成的整数,并从表中获取与给定输入匹配的行。但是我得到尝试获取一个接近SQLiteClosable的引用。如果我使用不带where子句,它是有效的。唯一的问题是当我在查询中使用where子句时 我的代码: db = openOrCreateDatabase("TestData.db", SQLiteDatabase.CREATE_IF_NECESSARY, null); db.setVersion(1); d

大家好,我正在android中创建数据库,我在表中插入一些随机生成的整数,并从表中获取与给定输入匹配的行。但是我得到
尝试获取一个接近SQLiteClosable的引用。如果我使用不带where子句,它是有效的。唯一的问题是当我在查询中使用where子句时

我的代码:

    db = openOrCreateDatabase("TestData.db",  SQLiteDatabase.CREATE_IF_NECESSARY, null);
    db.setVersion(1);
    db.setLocale(Locale.getDefault());
    db.setLockingEnabled(true);
    final String CREATE_TABLE_COUNTRIES ="CREATE TABLE IF NOT EXISTS tbl_countries (id INTEGER);";
    db.execSQL(CREATE_TABLE_COUNTRIES);

    ContentValues values = new ContentValues();
    values.put("id", 1);
    db.insert("tbl_countries", null, values);
    Log.e("sql", "ok");

    b1.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View view) 
        {
           String p = et.getText().toString();
           String [] columns=new String[]{"id"};    
           Cursor c=db.query("tbl_countries", columns, "id"+"=?",new String[]{p}, null, null, null);
           c.moveToFirst();
           c.close();
        }
    });

    db.close();
我的日志猫信息

  05-23 19:02:20.880: ERROR/AndroidRuntime(5533): java.lang.IllegalStateException: attempt to acquire a reference on a close SQLiteClosable
  05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:31)
  05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:56)
  05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
 05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:49)
 05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1236)
 05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1123)
 05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1081)
 05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1158)
 05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at com.sql.where.main$1.onClick(main.java:63)
 05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.view.View.performClick(View.java:2364)
 05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.view.View.onTouchEvent(View.java:4179)
 05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.widget.TextView.onTouchEvent(TextView.java:6591)
 05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.view.View.dispatchTouchEvent(View.java:3709)
 05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
  05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
  05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at  android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
 05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
 05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
 05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
 05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
 05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
 05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
  05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.os.Handler.dispatchMessage(Handler.java:99)
  05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.os.Looper.loop(Looper.java:123)
  05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at android.app.ActivityThread.main(ActivityThread.java:4363)
  05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at java.lang.reflect.Method.invokeNative(Native Method)
  05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at java.lang.reflect.Method.invoke(Method.java:521)
  05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
  05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at  com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
  05-23 19:02:20.880: ERROR/AndroidRuntime(5533):     at dalvik.system.NativeStart.main(Native Method)
05-23 19:02:20.880:错误/AndroidRuntime(5533):java.lang.IllegalStateException:尝试获取关闭SQLiteClosable上的引用
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):位于android.database.sqlite.SQLiteClosable.acquisitionerReference(SQLiteClosable.java:31)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:56)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):位于android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:49)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):位于android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:49)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):位于android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1236)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):位于android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1123)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):位于android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1081)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):位于android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1158)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):位于com.sql.where.main$1.onClick(main.java:63)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):在android.view.view.performClick(view.java:2364)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):在android.view.view.onTouchEvent(view.java:4179)上
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):在android.widget.TextView.onTouchEvent(TextView.java:6591)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):在android.view.view.dispatchTouchEvent(view.java:3709)上
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)上
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)上
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)上
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)上
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):在com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):位于com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):在android.app.Activity.dispatchTouchEvent(Activity.java:2061)上
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):位于com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):在android.view.ViewRoot.handleMessage(ViewRoot.java:1691)上
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):位于android.os.Handler.dispatchMessage(Handler.java:99)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):在android.os.Looper.loop(Looper.java:123)上
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):位于android.app.ActivityThread.main(ActivityThread.java:4363)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):位于java.lang.reflect.Method.invokenactive(本机方法)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):位于java.lang.reflect.Method.invoke(Method.java:521)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
05-23 19:02:20.880:ERROR/AndroidRuntime(5533):在dalvik.system.NativeStart.main(本机方法)

方法数据库中的
onClick()
已关闭。您应该再次打开或不关闭它,但第一个更可取。

它不是数据库。i移除c.close();但我仍然收到相同的错误,我告诉您,在调用db.close()之后调用了onClick方法;当您单击该按钮时,它将被调用。所以,您试图查询一个封闭的数据库。