qt操作sqlite 如何使用vacuum命令?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt操作sqlite 如何使用vacuum命令?相关的知识,希望对你有一定的参考价值。
在qt中使用sqlite数据库,清空数据库后内存未释放,如何释放sqlite数据库内存,vacuum命令是直接使用QSqlQuery类执行vacuum语句吗?
参考技术A qt操作sqlite 如何使用vacuum命令?使用Qt操作SQLite,可以使用QSqlQuery对象来执行VACUUM命令。例如:
// 创建一个数据库连接 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("mydb.sqlite"); if(!db.open()) qDebug() << "Error: connection with database fail"; else qDebug() << "Database: connection ok"; // 执行 VACUUM 命令 QString queryStr = "VACUUM;"; QSqlQuery query(queryStr, db); if (!query.exec()) qDebug() << "Error: Vacuum failed" ; else qDebug() << "Vacuum successful!" ;
Qt 如何连接到 android OS 中现有的 SQLite 文件?
【中文标题】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操作sqlite 如何使用vacuum命令?的主要内容,如果未能解决你的问题,请参考以下文章
如何 VACUUM 一个 Core Data SQLite 数据库?