当我们从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类的执行顺序。
答案 0 :(得分:1)
您创建了DatabaseHelper
- 类的实例,这会导致构造函数被执行。构造函数将执行母类构造函数(SQLiteOpenHelper
),然后检查数据库文件是否已存在。
如果存在,则不执行任何操作并创建对象。
如果它不存在,则创建数据库文件并调用onCreate
- 方法。
你说,你的数据库不存在。您是否在LogCat中收到任何错误?另外,您尝试过accessing the Database using the adb吗?
答案 1 :(得分:0)
订单应该是这样的(as reads SQLiteOpenHelper
javadoc)
openReadableDatabase()
或openWritableDatabase()
的第一次通话将被称为onCreate
onOpen
<强>加强>
刚检查了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)