构造函数做两件事情,首先,检查数据库是否存在,如果不存在,则调用onCreate方法创建数据库。然后,如果数据库已经存在了,那么就检查数据库版本是否和构造函数中传入的数据库版本值一致,从而决定数据库是不是已经更新(updated)过了,如果需要更新,则调用onUpgrade方法。
另外,如上所述,我们已经知道onCreate方法只有当数据库不存在的时候才会被调用,因此如果你想在程序安装以后第一次运行时做什么操作的话,这个方法倒不失为一个很方便的手段,你可以在这个方法中调用任何其他方法,比如说许可协议说明对话框。
让我们回头看看数据库本身,因为本文只是一个说明性质的文章,因此这里我只是创建一个简单的雇员信息数据库,创建数据库的SQL脚本如下所示:
1
2
3
4
5
6
7
|
CREATE TABLE employees ( _id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL , ext TEXT NOT NULL , mob TEXT NOT NULL , age INTEGER NOT NULL DEFAULT '0' ); |
我们可以很容易的用hard coding的方式将创建脚本写死在代码中,一行对应一行,代码如下:
1
2
3
4
5
6
7
|
@Override public void onCreate(SQLiteDatabase database) { database.execSQL(
"CREATE TABLE employees ( _id INTEGER PRIMARY KEY " + "AUTOINCREMENT, name TEXT NOT NULL, ext TEXT NOT NULL, " + "mob TEXT NOT NULL, age INTEGER NOT NULL DEFAULT '0')" ); } |
但正如你所想的那样,当数据库大小达到了某个值,或者复杂性达到了某个程度时,这种做法就会非常不灵活,因此理想的做法是将SQL脚本放到一个asset文件中。如果这样做的话,你需要写一个方法从assets目录中读取SQL脚本,然后执行它: