首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归调用的SQLite - getDatabase

问递归调用的SQLite - getDatabase
EN

Stack Overflow用户
提问于 2014-09-05 15:45:49
回答 2查看 2.9K关注 0票数 0

下面是我的代码:

代码语言:javascript
复制
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(); -这会导致循环。在这种情况下该怎么做?

EN

回答 2

Stack Overflow用户

发布于 2014-09-05 15:51:44

OnCreate方法只给你提供可写的数据库,所以不需要获取可写的数据库,当你调用可写/可读的数据库时,sqlite框架会检查数据库是否存在,如果不存在,它就会调用onCreate方法,这就是为什么这是递归的,不应该在SqliteOpenHelper类的onCreate/onUpgrade方法中调用getWritable/getReadable数据库

票数 2
EN

Stack Overflow用户

发布于 2014-09-05 15:54:35

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

如果数据库文件不存在,getWritableDatabase()和getReadableDatabase()将调用您的onCreate(),并且在前一个调用仍在处理时递归调用get...Database()会导致此异常。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25680919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档