Java 如何在SQLite数据库的onCreate函数中使用getWritableDatabase()?
我正在写一个android应用程序。为此,我需要使用txt文件中的数据填充SQLite数据库。所以在数据库的onCreate函数中,我创建数据库,然后用数据填充它。以下是onCreate的声明:Java 如何在SQLite数据库的onCreate函数中使用getWritableDatabase()?,java,android,sqlite,recursion,Java,Android,Sqlite,Recursion,我正在写一个android应用程序。为此,我需要使用txt文件中的数据填充SQLite数据库。所以在数据库的onCreate函数中,我创建数据库,然后用数据填充它。以下是onCreate的声明: public void onCreate(SQLiteDatabase db) { 但当我在onCreate中使用这行时: db = this.getWritableDatabase(); 在运行时,我在Logcat中发现了这个错误:“java.lang.IllegalStateException:
public void onCreate(SQLiteDatabase db) {
但当我在onCreate中使用这行时:
db = this.getWritableDatabase();
在运行时,我在Logcat中发现了这个错误:“java.lang.IllegalStateException:getDatabase递归调用(812)”。
因此,现在我无法从onCreate内部填充数据库,并且被卡住了。任何帮助都将不胜感激。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();
}
通常更快。您的意思是:Remove db=this.getWritableDatabase();只需使用db.insert(TABLE_CONTACTS,null,values);?db已经是可写形式了吗?是的,我是说。只需使用getWriteableDatabase()返回的db