我已经在 QML 中创建了一个使用 U1Db qml Api(sdk 15.04.5)的应用程序。该应用程序创建一个数据库来保存其数据。该应用程序已加载到 Ubuntu 商店并可供用户使用。
数据库创建如下:
U1db.Database {
id: mypeopleDb
path: Qt.resolvedUrl("MyPeople_db");
}
当我将新版本的应用程序上传到 Ubuntu 商店并且用户更新旧应用程序时,现有数据库会发生什么?旧数据库会丢失?被覆盖?被重复使用?
解决这种情况的最佳方案是什么?
谢谢
答案1
为了对我的问题得到肯定的答复,我已经尝试使用我的应用程序:
1)我已将新版本的应用程序上传到 Ubuntu 商店
2)我已将旧版本应用程序(已安装在我的平板电脑上)更新为新版本(使用平板电脑的 ubuntu 更新功能)
结论:
旧应用程序版本创建的旧数据库未被新应用程序重用:创建了一个新的空白数据库(未对数据库结构进行任何修改)。
我已经确认旧数据库没有丢失(保留在文件系统中)。使用 U1Db QML API 创建的数据库位于以下路径下的文件夹中:
~phablet/.local/share//file:/opt/click.ubuntu.com/“applicationName”/“version”/“NameApplication”/
其中:“applicationName”是在源代码的 Main.qml 中插入“applicationName”字段的值
“version” 是应用程序版本(例如:1.1)
“NameApplication”是应用程序的名称
因此旧版 App 1.0 的数据库位于:
~phablet/.loca/share/“applicationName”/file:/opt/click.ubuntu.com/“applicationName”/1.0/“NameApplication”/
新版本 1.1 的版本如下:
~phablet/.loca/share/“applicationName”/file:/opt/click.ubuntu.com/“applicationName”/1.1/“NameApplication”/
要使用旧数据库,必须将数据库文件从旧文件夹复制到新文件夹,覆盖另一个文件夹。为此,可以使用终端应用程序或平板电脑的文件管理器(在文件管理器菜单中启用显示隐藏文件夹的选项后(.local 是主文件夹中的隐藏文件夹))。
我已经验证无需 QT.resolveurl("...") 即可创建数据库:
U1db.Database {
id: mypeopleDb1_0
path: "MyPeople_db";
}
数据库文件将放置在以下文件夹中:
.local/share/“应用程序名称” 应用程序版本号没有任何参考。
所以我认为正确的解决方案是不要使用 QT.resolvedUrl() 来防止应用程序更新时出现问题。
因此,新的问题是:如何从 DB 文件创建并导出/导入内容?似乎无法使用 U1DB QML API....