1

私はAndroidアプリを書いています。そのためには、SQLiteデータベースにtxtファイルのデータを入力する必要があります。したがって、データベースのonCreate関数では、データベースを作成してから、データを入力しています。onCreateの宣言は次のようになります。

public void onCreate(SQLiteDatabase db) {

しかし、onCreate内でこの行を使用すると、次のようになります。

db = this.getWritableDatabase();

Logcatで実行時に次のエラーが発生します: "java.lang.IllegalStateException:getDatabase called recursively(812)"。そのため、onCreate内からデータベースにデータを入力できず、スタックします。どんな助けでもありがたいです。

4

1 に答える 1

2

onCreate()は、getReadableDatabaseまたはgetWriteableDatabaseを初めて呼び出すときに呼び出されます。確かに起こっていることは、dbがまだ作成されておらず、

db = this.getWritableDatabase();

呼び出しは、作成内の作成をトリガーします。

dbを事前入力する必要がある場合は、のdb引数をonCreate書き込み可能なデータベースとして使用してください。

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

多くのdb操作を実行する必要がある場合は、

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

一般的に高速です。

于 2013-03-26T22:38:05.527 に答える