Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在SQLite数据库的onCreate函数中使用getWritableDatabase()?_Java_Android_Sqlite_Recursion - Fatal编程技术网

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

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:

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

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