Qt 如何连接到 android OS 中现有的 SQLite 文件?

Posted

技术标签:

【中文标题】Qt 如何连接到 android OS 中现有的 SQLite 文件?【英文标题】:Qt how connect to an existing SQLlite file in android OS? 【发布时间】:2014-05-02 07:40:33 【问题描述】:

我正在尝试连接到我的 qt 5.2 项目(在 android 操作系统中)中的现有 SQLlite 数据库文件。我应该在哪里保存此文件以使用此代码加载它:QSqlDatabase::addDatabase("myfile.sqlite");

【问题讨论】:

【参考方案1】:

首先,您应该使用 addDatabase 添加一个数据库连接,驱动程序类型为 QSQLITE,连接名称如 MyConnection。

QSqlDatabase db = QSqlDatabase::addDatabase( "QSQLITE","MyConnection" );

接下来您应该设置连接的数据库名称并打开它。

db.setDatabaseName( "myfile.sqlite" );
if( !db.open() )

    QMessageBox::warning(this, tr("Failed to connect!"), tr("Error connecting to database: ")+db.lastError().driverText() );

在您的开发文件夹中,您会找到 \android\assets - 只需将 SQLite 数据库文件放入该文件夹并将它们添加到您的 .pro 中:

deployment.files += myfile.sqlite
deployment.path = /assets
INSTALLS += deployment

但资产中的文件是只读的。所以你应该先把它复制到其他位置:

QFile dfile("assets:/myfile.sqlite");
if (dfile.exists())

     dfile.copy("./myfile.sqlite");
     QFile::setPermissions("./myfile.sqlite",QFile::WriteOwner | QFile::ReadOwner);

现在您可以如上所述连接到您的数据库了。

【讨论】:

我按照这些步骤操作,但是当我构建我的 android 应用程序时,sqlite 数据库会从资产文件中删除吗?我无法从数据库中插入或获取值?请提前帮助和感谢 @noname 您还可以使用 Qt 资源系统,它是一个跨平台的解决方案。默认情况下,所有 Qt 应用程序都可以使用 :/ 前缀或 URL 方案前缀 qrc: 访问 qrc 文件的内容。因此,您只需将 sqlite 文件添加到项目资源文件中,然后将其复制到某个位置并随后使用它 谢谢你的回复,我试试这个并将它复制到它的目录,但是当我想在数据库中插入一个值时,我得到这个文件是只读的,虽然我使用我的文件的 setpremissions和同样的:尝试这个文件只读 但是assets 中的文件是只读的。 - 即使您只需要只读访问权限,您也必须将文件复制到资产位置,因为 SQLite 只能理解普通的文件系统路径,而不是 assets:/… (details)

以上是关于Qt 如何连接到 android OS 中现有的 SQLite 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将相机预览流从android连接到Qt5?

如何使用 React Native 连接到 Android TV 模拟器(在 Mac OS 上)?

如何将现有的 Android Studio 项目连接到现有的 Github 存储库

有没有办法将 Redis 层设置为 OpsWorks 中现有的 Rails 应用程序?

通过蓝牙将 Android 应用程序连接到 Mac OS X 上的 Python 脚本

如何修复 Android 模拟器中的“无法连接到相机服务”异常