我有一个应用程序,它使用QSQLITE驱动程序和本地文件系统上的文件上的QSqlDatabse.我想写一个备份函数,它将保存数据库的快照.
简单地复制文件似乎是一种明显,简单的方法,但我不确定何时这样做是安全的.
应用程序在定义明确的点修改数据库.每次都会创建,使用并立即销毁新的QSqlQuery对象.显式锁定/刷新是一种可接受的解决方案,但Qt API似乎没有公开这一点.
我在Qt将数据库提交到磁盘时找不到任何文档.我想QSqlDatabase析构函数会这样做,但即便如此,我也不知道(在Windows或Linux上)复制文件是否保证会导致最近的更改被复制(而不是仅仅是那些更改)已在文件系统期刊中定稿).有人可以确认或否认吗?如果在执行复制之前关闭写文件句柄会有什么不同吗?
也许唯一安全的方法是进行在线复制,但我已经在使用Qt API而不知道这将如何互动.
任何意见,将不胜感激.
复制一个SQLite数据库是微不足道的,但以一种不会破坏它的方式执行此操作并不是一件容易的事.这将为您提供一个很好的干净备份,确保处于正确的状态,因为在复制过程的中途写入数据库是不可能的.
QSqlQuery qry(db);
qry.prepare( "BEGIN IMMEDIATE;");
qry.exec();
QFile::copy(databaseName, destination);
qry.prepare( "ROLLBACK;");
qry.exec();
Run Code Online (Sandbox Code Playgroud)
在BEGIN IMMEDIATE之后,没有其他数据库连接可以写入数据库或执行BEGIN IMMEDIATE或BEGIN EXCLUSIVE.
| 归档时间: |
|
| 查看次数: |
2654 次 |
| 最近记录: |