SQLite DatabaseHelper类

时间:2011-07-07 11:24:15

标签: android sqlite

当我们从android应用程序创建SQLite数据库时,可以使用扩展SQLiteOpenHelper的DatabaseHelper类。

我的构造函数如下

public DatabaseHelper(Context context)  
{
      super(context, dbName, null, DATABASE_VERSION);  
}

然后是onCreate()方法

public void onCreate(SQLiteDatabase db) 
{
    String qry = "CREATE TABLE DEPT(dept_id INTEGER PRIMARY KEY, deptName TEXT)";   
    db.execSQL(qry);
    InsertDepts(db); 
}

但是当我创建DatabaseHelper类的实例时,我的数据库还没有创建。

我相信当我从这个类创建一个Object时,构造函数会执行,因为没有创建数据库,它将创建数据库并执行onCreate()方法。所以肯定必须创建一个数据库。

或者直到我们执行以下代码,它不执行onCreate()方法,即使我们从类中创建了一个对象。

databaseHelper.getWritableDatabase()

任何人都可以解释一下databasehelper类的执行顺序。

3 个答案:

答案 0 :(得分:1)

您创建了DatabaseHelper - 类的实例,这会导致构造函数被执行。构造函数将执行母类构造函数(SQLiteOpenHelper),然后检查数据库文件是否已存在。

如果存在,则不执行任何操作并创建对象。

如果它不存在,则创建数据库文件并调用onCreate - 方法。

你说,你的数据库不存在。您是否在LogCat中收到任何错误?另外,您尝试过accessing the Database using the adb吗?

答案 1 :(得分:0)

订单应该是这样的(as reads SQLiteOpenHelper javadoc

  1. 构造
  2. openReadableDatabase()openWritableDatabase()的第一次通话将被称为onCreate
  3. 然后会调用onOpen
  4. <强>加

    刚检查了SQLiteOpenHelper构造函数的来源,它显示为:

    public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) {
            if (version < 1) throw new IllegalArgumentException("Version must be >= 1, was " + version);
    
            mContext = context;
            mName = name;
            mFactory = factory;
            mNewVersion = version;
        }
    

    相反,openReadableDatabase / OpenWritableDatabase来源包含对openOrCreateDatabase()的调用 - 因此构造函数不会调用onCreate

答案 2 :(得分:0)