【问题标题】:SQLiteOpenHelper not calling onCreateSQLiteOpenHelper 没有调用 onCreate
【发布时间】:2011-08-23 16:24:59
【问题描述】:

这是我第一次使用 SQLiteOpenHelper(或 android 上的数据库)。当我得到一个可写的数据库时,我想知道为什么在类的每个新实例上都没有调用 onCreate。我做错了吗?

public class DatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "MyDatabase.db";
    private static final int DATABASE_VERSION = 1;
    private String PrSQLcmd = "";


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


@Override
public void onCreate(SQLiteDatabase db) 
{
    db.execSQL("CREATE TABLE IF NOT EXISTS Contact(Firstname TEXT, LastName TEXT");
}


@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub

}

}

【问题讨论】:

  • 您尝试卸载应用程序了吗?可能你已经有数据库,所以它不会调用onCreate
  • 你完全正确,我忘记了它只是查看了数据库而不是我试图添加的表。完美运行。
  • @NikitaBeloglazov +1 因为这是所有这些相关帖子中最常见的错误。当您回到旧项目时很容易忘记它。

标签: android sqlite oncreate sqliteopenhelper


【解决方案1】:

在 SQLiteOpenHelper 中,'onCreate' 的含义与它在 Activity 中的含义不同。这里,'onCreate'只被调用了一次,也就是你第一次创建数据库。下次运行应用程序时,数据库已经存在,因此它不会调用“onCreate”。您的对象级初始化应该在构造函数中完成,而不是在“onCreate”中完成

要查看“onCreate”被调用,要么手动删除 db 文件,要么直接卸载应用程序。

【讨论】:

  • 您的数据库将在您调用 getWritableDatabase()/readableDatabase() 时创建,这会打开现有数据库,如果不存在则创建新数据库。因此,onCreate 只会在该数据库被缓存后被调用一次,并将根据读取或写入的请求提供。
猜你喜欢
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
相关资源
最近更新 更多