SQLite Android数据库预加载数据库和管理
我目前有一个数据库,将通过互联网进行更新。然而,我也将有一个预加载的数据库来启动用户。我在想,在允许基于数据库版本号进行更新的同时,如何处理预加载的信息是最好的方法。因此,我可能会包含一个数据库资源文件,或者使用列表将它们全部添加。所以我的问题是,我应该如何管理我的启动数据库并确保它不会一次又一次地添加表,我应该使用这个还是使用数据库版本的共享首选项或其他什么?将数据库文件(带有预加载的数据)添加到项目的资产文件夹中。 然后在应用程序中调用数据库时,检查数据库是否存在,如果不存在,则将数据库从资产复制到应用程序中SQLite Android数据库预加载数据库和管理,android,database,sqlite,Android,Database,Sqlite,我目前有一个数据库,将通过互联网进行更新。然而,我也将有一个预加载的数据库来启动用户。我在想,在允许基于数据库版本号进行更新的同时,如何处理预加载的信息是最好的方法。因此,我可能会包含一个数据库资源文件,或者使用列表将它们全部添加。所以我的问题是,我应该如何管理我的启动数据库并确保它不会一次又一次地添加表,我应该使用这个还是使用数据库版本的共享首选项或其他什么?将数据库文件(带有预加载的数据)添加到项目的资产文件夹中。 然后在应用程序中调用数据库时,检查数据库是否存在,如果不存在,则将数据库从资
我认为博客中有一个很好的示例,可以用示例代码实现这一点。只要用谷歌搜索一下,你就会发现你的内容提供商会打电话给你
SQLiteDatabase db = database.getWritableDatabase();
如果需要,它将调用sqlite openhelper的onCreate
和OnUpgrade
。因此,我认为没有必要使用额外的库来实现这一点。当你第一次升级应用程序时,你会被冷落。我认为升级SQLite数据库的最佳方法是,我称之为Adams升级方法,因为我在上找到了它
这是我在onUpgrade方法中得到的。
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
int upgradeTo=oldVersion+1;
虽然(升级到这样您就有两个数据库,一个预加载,另一个正在从internet更新,对吗?我应该使用应用程序修补程序文件来更新数据库,还是应该在我的服务器上使用JavaScript之类的东西。不,您应该有sql脚本来填充数据库。原始文件夹中的文本文件将压缩nicelY
int upgradeTo = oldVersion + 1;
while (upgradeTo <= newVersion) {
@SuppressWarnings("unused")
int res;
switch (upgradeTo) {
// update old resrawid's to constants
// this was caused when I saved R values in the database
// and then later realized they would change.
// the old resrawid is changed to a constant.
case 42:
ContentValues values;
int rs;
rs = 2130968576;
values = new ContentValues();
values.put(
KEY_RESRAWID,
com.gosylvester.bestrides.ImageTextListViewActivity.SAMPLE_DRAGON);
res = db.update(TABLE_RIDES, values, KEY_RESRAWID + " = ?",
new String[] { String.valueOf(rs) });
rs = 2130968577;
values = new ContentValues();
values.put(
KEY_RESRAWID,
com.gosylvester.bestrides.ImageTextListViewActivity.SAMPLE_M119);
res = db.update(TABLE_RIDES, values, KEY_RESRAWID + " = ?",
new String[] { String.valueOf(rs) });
rs = 2130968578;
values = new ContentValues();
values.put(
KEY_RESRAWID,
com.gosylvester.bestrides.ImageTextListViewActivity.SAMPLE_MEDINA);
res = db.update(TABLE_RIDES, values, KEY_RESRAWID + " = ?",
new String[] { String.valueOf(rs) });
break;
case 43:
// new column added for last_viewed.
db.execSQL(VERSION_43_ALTER);
break;
case 44:
// new index on KEY_DATE_UPDATE DESC
db.execSQL(VERSION_44_CREATE_INDEX);
break;
case 45:
// change field name id to _id
// check if current table has _id column
String s = "PRAGMA table_info(" + TABLE_RIDES + ")";
Cursor ti = db.rawQuery(s, null);
if (ti.moveToFirst()) {
String key = ti.getString(1);
if (!key.equals(KEY_ID)) {
// drop existing indexes
db.execSQL(VERSION_45_DROP_INDEX);
// rename old table
db.execSQL(VERSION_45_RENAME_TABLE);
// create new table
db.execSQL(VERSION_45_CREATE_TABLE);
// copy from old table to new table
db.execSQL(VERSION_45_COPY_TABLE);
// delete old table
db.execSQL(VERSION_45_DROP_TEMP_TABLE);
// CREATE DROPED INDEXES
db.execSQL(VERSION_45_CREATE_INDEX);
}
}
// get the row count if zero then add in the samples
long x = DatabaseUtils.queryNumEntries(db, TABLE_RIDES);
if (x == 0) {
loaddatabase(db);
}
}
upgradeTo++;
}
}