2013-03-26 88 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

相关问题