2011-12-15 6 views
1

データベースを閉じるときにデータベースを作成できません(以下のチェックコード)。私がそれを閉じることができない場合はすべて正常に動作しますが、close()が明示的に呼び出されたことがないというlogcatでいくつかのエラーが発生します。私がデータベースを作成してからclose()を追加すると、それらのエラーは消えてしまいますが、私のアプリを再インストールして実行することはできません。データベースを正しく閉じる

private static class DbHelper extends SQLiteOpenHelper { 

    public DbHelper(Context context) { 
     super(context, DATABASE_score, null, DATABASE_VERSION); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 

     db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID 
       + " INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, " + KEY_SCORE1 
       + " INTEGER TEXT NOT NULL, " + KEY_SCORE2 
       + " INTEGER TEXT NOT NULL);"); 
     db.close(); <---problem 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
     onCreate(db); 
    } 
} 

public Database(Context c) { 
    ourContext = c; 
} 

public Database open() throws SQLException { 
    ourHelper = new DbHelper(ourContext); 
    ourDatabase = ourHelper.getWritableDatabase(); 
    return this; 
} 

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

public long createEntry(String score, String score2) { 
    // TODO Auto-generated method stub 
    ContentValues cv = new ContentValues(); 
    cv.put(KEY_SCORE1, score); 
    cv.put(KEY_SCORE2, score2); 

    return ourDatabase.insert(DATABASE_TABLE, null, cv); 
} 

そこで質問です:どのように私はdb.close()を呼び出し、私のアプリが正常に実行しなければなりませんか?

+1

少なくとも10-15行のlogcat出力を投稿してください。 –

答えて

2

あなたのDbHelperクラスであなたのonCreate()db.close();を呼び出す必要はありません。

代わりに、 DbHelper_instance.getReadableDatabase()またはDbHelper_instance.getWritableDatabase()を使用してDbHelperクラスからデータベースインスタンスを取得し、SQLiteDatabaseオブジェクト(のはSQLiteDatabaseデータベースとしてそれを定義してみましょう)にそれを割り当てる必要があります。データベースの使用を終了し、あなたのカーソルをクローズした後

、あなたのような何かを行うことができます。

 if (database.isOpen()) { 
      Log.d(TAG + " Closing SQLite Database connection..."); 
      database.close(); 
     } 

をあなたはそれが常に念頭に置いて撮る(実行されます確認するために、ブロック最終的にはそれを中に入れることができますDB操作はtry/catchで囲まれています)。

+0

を作る;/ –

+0

あなたが直接質問、またはポストを持っている場合、私は、あなたを助けることができますあなたの完全なソース。 – hovanessyan

+0

悲しいことは私が行ったことですが、本当に明るい人が私の投稿を編集したことです!!!!私はあなたのポストのロジックを見て、それを実装しようとします.... –

0
private Context context; 
private SQLiteDatabase db; 

public DataBase(Context context) { 
    this.context = context; 
    OpenHelper openHelper = new OpenHelper(this.context); 
    this.db = openHelper.getWritableDatabase(); 
} 

public void closeData() { 
    this.db.close(); 
} 

これを試してみてください;)

+0

うーん....それがクラッシュし \t private Context context; \t \t private SQLiteDatabase db; \t \t private Database dbHelper; \t \t public DbHelper(Context context) { \t \t \t super(context, DATABASE_score, null, DATABASE_VERSION); \t \t \t // TODO Auto-generated constructor stub \t \t \t this.context = context; \t \t \t this.db = dbHelper.getWritableDatabase(); \t \t } \t \t public void close() { \t \t \t dbHelper.close(); \t \t }

0

コールsuper.close();

if(myDataBase != null) 
     myDataBase.close(); 

     super.close(); 
+0

desnt作業を作業することを得るカント; /それは私はあなたのソリューションを実装傾ける何らかの理由でアプリがクラッシュ –

関連する問題