2013-03-26 83 views
1

我正在寫一個android應用程序。爲此,我需要使用txt文件中的數據填充SQLite數據庫。所以在數據庫的onCreate函數中,我創建了數據庫,然後用數據填充它。這是的onCreate的聲明看起來是這樣的:如何在SQLite數據庫的onCreate函數中使用getWritableDatabase()?

public void onCreate(SQLiteDatabase db) { 

但是當我使用裏面的onCreate此行,:

db = this.getWritableDatabase(); 

我得到在logcat中運行時,這個錯誤:「java.lang.IllegalStateException:getDatabase稱爲遞歸(812)「。 所以現在我無法從onCreate內部填充數據庫,並且卡住了。任何幫助將不勝感激。

回答

2

onCreate()在您第一次調用getReadableDatabase或getWriteableDatabase時會被調用。什麼是一定發生的事情是的onCreate是越來越遞歸調用,因爲該數據庫還沒有被創建和你

db = this.getWritableDatabase(); 

調用觸發創作中創建。

如果您需要預先填寫數據庫,只需使用onCreate的db參數作爲可寫數據庫。

@Override 
public void onCreate(SQLiteDatabase db) {   
    db.execSQL(YOUR_STATEMENT); 
    . 
    . 
} 

如果您需要執行大量的數據庫操作,使用

db.beginTransaction(); 
. 
. 
db.setTransactionSuccessful(); 
} catch (SQLException e) { 
} finally { 
     db.endTransaction(); 
} 

一般要快。

+0

你的意思是這樣的:Remove db = this.getWritableDatabase();並使用db.insert(TABLE_CONTACTS,null,values);? db已經是可寫的形式了嗎? – 2013-03-26 22:48:35

+0

是的,我的意思是。只需使用db,因爲它是由getWriteableDatabase()返回的 – fedepaol 2013-03-26 22:50:14

相關問題