这个应用程序有很多功能,但有一个就是这个,学生可以搜索他想要的书,然后应用程序会显示他这本书的位置,哪一排架子......作者姓名,标签号码...... 如果新书到达图书馆,我如何更新每台手机上的现有数据库, 我可以发送更新的数据库怎么可能? 或者我可以发送新的SQL查询如何可能? 或者你的任何建议? 该应用程序处于离线状态我不希望它每次都使用互联网,只需每周更新一次。
答案 0 :(得分:1)
您需要更改在扩展SqliteOpen Helper的Database类中的OnCreate方法中传递的版本号。安装新版本应用程序时,它将调用OnUpgrade(..)方法,在此处编写所有查询。
答案 1 :(得分:1)
首先,您需要更新已在应用中创建的现有数据库的版本。
这是关于
的简要说明<强> onUpgrade() 强>
1. SQLiteOpenHelper should call the super constructor.
2. The onUpgrade() method will only be called when the version integer is larger than the current version running in the app.
3. If you want the onUpgrade() method to be called, you need to increment the version number in your code.
答案 2 :(得分:0)
如@Rohit Heera所述,应用程序升级将解决您的问题,但在我的回答中,我会回答不同的方法。
如果新书到达图书馆我如何更新现有图书 将在每部手机上的数据库
当新书到达时,或者您已准备好更新数据库的书籍集合时,您可以计划向每个设备发送推送通知,以便让用户知道他们的新书是可用的。 之后(点击推送通知),客户有责任点击服务器apis并获取新书。
安排推送通知的方法:
这样您就不会强制用户更新应用程序。
答案 3 :(得分:0)
听起来你有一个静态数据库,你只想替换设备上的文件。如果是这种情况,试试这个。
您可以压缩新数据库文件并将其放在原始目录中。
当应用程序启动时和创建连接之前,您需要删除当前数据库(确保跟踪数据库路径以供日后使用)
File existingDb = context.getDatabasePath([name of database]);
if(dbDir.exists()) {
dbDir.delete();
}
然后解压缩新的数据库文件,在zip中找到正确的文件并将其复制到您之前跟踪的数据库目录中。
ZipInputStream zis = new ZipInputStream(context.getResources().openRawResource([zip res]));
try {
ZipEntry ze = null;
while ((ze = zis.getNextEntry()) != null) {
String fileName = ze.getName();
// ensure only plists are added to the input streams
if (DATABASE_FILE_NAME.equals(fileName)) {
int actual = 0;
byte[] baf = new byte[MAX_DOWNLOAD_CHUNK];
FileOutputStream out = new FileOutputStream(new File([outDir], fileName));
while ((actual = zis.read(baf, 0, MAX_DOWNLOAD_CHUNK)) > 0) {
out.write(baf, 0, actual);
}
out.flush();
out.close();
zis.closeEntry();
}
}
} finally {
try {
zis.close();
} catch (IOException e) {
// file is already closed. ignore
}
}
您现在应该能够按照正常
连接到新数据库