2

場合によっては、次のコードで sqlite データベースを開こうとすると:

  dbManager.open();

メソッドを以下に示します。

  SQLiteDatabase mDb;
  DbHelper mDbHelper;

   public void open(){  
        mDb=mDbHelper.getWritableDatabase();
   }

次のエラーが表示されます。

11-08 12:39:25.760: E/SQLiteDatabase(5603): close() was never explicitly called on database '/data/data/act.myactivity/databases/seasonDb' 
11-08 12:39:25.760: E/SQLiteDatabase(5603): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
11-08 12:39:25.760: E/SQLiteDatabase(5603):     at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1980)
11-08 12:39:25.760: E/SQLiteDatabase(5603):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:977)
11-08 12:39:25.760: E/SQLiteDatabase(5603):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:956)
11-08 12:39:25.760: E/SQLiteDatabase(5603):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1021)
11-08 12:39:25.760: E/SQLiteDatabase(5603):     at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:753)
11-08 12:39:25.760: E/SQLiteDatabase(5603):     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)
11-08 12:39:25.760: E/SQLiteDatabase(5603):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:149)
11-08 12:39:25.760: E/SQLiteDatabase(5603):     at host.database.DB_DatabaseManager.open(DB_DatabaseManager.java:136)
11-08 12:39:25.760: E/SQLiteDatabase(5603):     at host.framework.ServicePromemoria.checkUnSyncInsert(ServicePromemoria.java:265)
11-08 12:39:25.760: E/SQLiteDatabase(5603):     at host.framework.ServicePromemoria$1.run(ServicePromemoria.java:59)
11-08 12:39:25.760: E/SQLiteDatabase(5603):     at java.util.Timer$TimerImpl.run(Timer.java:284)

これは、閉じられていないデータベースを開こうとしたことに関連していると思います。

ps: データベース接続を閉じる方法は次のとおりです。

 public void close(){
        mDb.close();
}

編集:

これは のコアですcheckUnSyncInsert():

  dbManager.open(); //here error occurs
    String getUserQuery = "SELECT * FROM user";
    Cursor c = dbManager.RawQuery(getUserQuery, null);

    if(c.getCount() != 0)
    {
        try{
            c.moveToFirst();
            usr = c.getString(0).toString();
            pwd = c.getString(1).toString();
            Log.i("USERNAME: "+pwd,"PASSWORD: "+pwd);
            c.close();
        }catch(Exception ex)
        {
            ex.printStackTrace();
            c.close();
        }
    }
    else

    dbManager.close();

エラーは最初の行で発生します ( dbManager.open())

4

3 に答える 3

0

データベースを再度開く前に、まずデータベースを閉じていることを確認してください。メソッド内のデータベースを次のように開いたり閉じたりすることもできます。

public void addGroupContact(String groupId, String contactId) {

        Log.d("Database : ", "*****************Ädd Group Contact******************");
        mDbHelper = new NewDatabaseHelper();
        mDatabase = mDbHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(NewDatabaseHelper.KEY_GROUP_F_ID, groupId); // Group Id
        values.put(NewDatabaseHelper.KEY_CONTACT_ID, contactId); // contact id
        // Inserting Row
        mDatabase.insert(NewDatabaseHelper.TABLE_GROUPS_CONTACTS, null, values);
        mDatabase.close(); // Closing database connection
    }
于 2012-11-09T13:01:07.820 に答える
0

何も返されない場合にのみ閉じます。このコードが数回実行される場合、エラーは理解できます。

于 2012-11-08T12:21:26.733 に答える
-1

破棄および一時停止時にデータベースが閉じていることを確認する必要があります

于 2012-11-08T12:27:15.227 に答える