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

SQLite Vacuum

如何 VACUUM 一个 Core Data SQLite 数据库?

来自 SQLiteOpenHelper 的 VACUUM sqlite 数据库

如何缩小sqlite数据库?

[转载]SQLite3性能优化

03Sqlite使用技巧