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 中将插槽连接到信号 QProcess::started()?