SQLite - 递归调用getDatabase

时间:2014-09-05 07:45:49

标签: android sqlite getwritabledatabase

这是我的代码:

public class DBHelper extends SQLiteOpenHelper {

@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("sql-query");

        try {
            //db = getWritableDatabase();
            fillAllDB(db);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
// some code
}

fillAllDB(db);方法向表中添加了一条记录,但在方法调用之前我无法使用db = getWritableDatabase(); - 这会导致循环。在这种情况下该怎么办?

2 个答案:

答案 0 :(得分:2)

OnCreate方法只为您提供可写数据库,因此无需获取可写数据库,当您调用可写/可读数据库时,sqlite框架会检查数据库是否存在,如果没有,则会调用{ {1}}方法,为什么这是递归的,你不应该在onCreate类的getWritable/getReadable方法中调用onCreate/onUpgrade数据库

答案 1 :(得分:1)

使用传递给SQLiteDatabase db方法的onCreate()参数作为数据库来调用您的操作。

如果数据库文件不存在,

getWritableDatabase()getReadableDatabase()将调用您的onCreate(),并且在前一个调用仍在处理时递归调用get...Database()会导致此异常

另外,在onCreate()中捕获异常不是一个好主意。如果出现问题,onCreate()方法不应该正常返回 - 告诉框架数据库设置是否成功。