如何在SQLite数据库的onCreate函数中使用getWritableDatabase()?

时间:2013-03-26 22:30:14

标签: java android sqlite recursion

我正在写一个Android应用程序。为此,我需要使用来自txt文件的数据填充SQLite数据库。所以在数据库的onCreate函数中,我正在创建数据库,然后用数据填充它。这就是onCreate的声明:

public void onCreate(SQLiteDatabase db) {

但是当我在onCreate中使用这一行时,:

db = this.getWritableDatabase();

我在运行时在Logcat中收到此错误:“java.lang.IllegalStateException:getDatabase(递归调用(812)”)。 所以现在我无法从onCreate里面填充数据库,而且卡住了。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

onCreate()在第一次调用getReadableDatabase或getWriteableDatabase时被调用。当然正在发生的是onCreate被递归调用,因为还没有创建db而你的

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();
}

通常更快。