1

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

public void onCreate(SQLiteDatabase db) {

但是当我在 onCreate 中使用这条线时,:

db = this.getWritableDatabase();

我在运行时在 Logcat 中收到此错误:“java.lang.IllegalStateException: getDatabase called recursively(812)”。所以现在我无法从 onCreate 内部填充数据库,并且被卡住了。任何帮助将不胜感激。

4

1 回答 1

2

第一次调用 getReadableDatabase 或 getWriteableDatabase 时会调用 onCreate()。肯定发生的是 onCreate 被递归调用,因为尚未创建数据库并且您的

db = this.getWritableDatabase();

调用触发创建内部的创建。

如果需要预填充 db,只需使用 db 参数onCreate作为可写数据库。

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

如果您需要执行大量数据库操作,请使用

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

一般比较快。

于 2013-03-26T22:38:05.527 回答