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 文件?的主要内容,如果未能解决你的问题,请参考以下文章

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

Qt for Qt:如何连接到具有新信号/插槽风格的信号?

Qt:如何将不同类的静态信号连接到插槽?

如何在 Qt 中将插槽连接到信号 QProcess::started()?

如何在 qt 设计器中将功能连接到 qt 小部件? - Python

如何将 Qt 库连接到标准 C++ 项目?