2011-12-15 110 views
1

当我关闭它时(检查下面的代码),我无法创建我的数据库。如果我不关闭它的一切工作正常,但我在logcat中发现几个错误,说close()从未明确调用。如果我已经创建了数据库,然后添加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

发布logcat输出,至少10-15行。 – 2011-12-15 10:03:20

回答

2

你不必在你的DbHelper类调用db.close();onCreate()内。

相反,你必须使用 DbHelper_instance.getReadableDatabase()DbHelper_instance.getWritableDatabase()您DbHelper类获得一个数据库实例并将其赋值给SQLiteDatabase对象(让我们把它定义为SQLiteDatabase数据库)。

完成后使用的数据库,并且你闭上你的光标,你可以这样做:

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

你可以把在finally块,以确保它会一直执行(以记住你的数据库操作被try/catch包围)。

+0

由于某种原因,我不能实施解决方案;/ – 2011-12-17 06:38:25

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 } 2011-12-17 07:46:51

0

调用super.close();

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

     super.close(); 
+0

desnt工作; /它使应用程序崩溃 – 2011-12-16 07:44:13