暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQLite——数据库备份

原创 GaussDB数据库 2022-04-15
4205

文章转自华为云社区,作者:小糖饼最甜呀;原文链接:https://bbs.huaweicloud.com/blogs/346772

SQLite数据库提供数据库备份功能接口,可以实现将一个数据库的内容复制到另一个数据库中。备份接口可以非常方便的创建数据库备份,也可以将内存中的数据库与文件保存的数据库进行相互间的复制。

SQLite数据库备份接口如下:

  • sqlite3_backup_init():调用一次,用来初始化备份;
  • sqlite3_backup_step():在两个数据库间传输数据,可以调用一次或者多次;
  • sqlite3_backup_finish():备份结束,用于释放与备份操作相关的所有资源;
  • sqlite3_backup_remaining:获取当前仍需要备份的页数;
  • sqlite3_backup_pagecount:获取当前源数据库中的总页数;

sqlite3_backup_init、sqlite3_backup_step、sqlite3_backup_finish三个函数就可以简单的完成数据库备份操作。

初始化备份对象

sqlite3_backup_init函数
函数作用: 初始化sqlite3_backup对象,
函数原型

///
/// \brief sqlite3_backup_init
/// \param pDest 目标数据库的句柄
/// \param zDestName 目标数据库的名称
/// \param pSource 源数据库的句柄
/// \param zSourceName 源数据库的名称
/// \return
///
sqlite3_backup *sqlite3_backup_init(sqlite3 *pDest, const char *zDestName, sqlite3 *pSource, const char *zSourceName);
复制

返回值
成功,返回一个sqlite3_backup对象,参与后续备份操作;
失败,返回null,错误码由sqlite3_errcode函数获取;
其他说明
初始化备份时,确保目标数据库无读事务或读写事务;否则执行失败。

执行备份操作

sqlite3_backup_step函数
函数作用: 初始化sqlite3_backup对象,
函数原型

///
/// \brief sqlite3_backup_step
/// \param p sqlite3_backup对象
/// \param nPage 备份页数
/// \return 
///
int sqlite3_backup_step(sqlite3_backup *p, int nPage);
复制

返回值:
成功,尚余未备份的页面,返回SQLITE_OK;
成功,无备份页面,返回SQLITE_DONE;
失败,返回错误码。
其他说明:
当nPage为正整数时,表示每次备份的页面数量;
当nPage为-1时,表示整体拷贝所有的页面;

结束备份

sqlite3_backup_finish函数
函数作用: 释放相关资源,避免内存泄漏,
函数原型

///
/// \brief sqlite3_backup_finish
/// \param p sqlite3_backup对象
/// \return 
///
int sqlite3_backup_finish(sqlite3_backup *p);
复制

备份页数函数说明:

当需要备份内容过多时,可以分步备份,用于备份过程中获取备份页数,打印备份进度。

sqlite3_backup_remaining函数:获取当前仍需要备份的页数;
sqlite3_backup_pagecount函数:获取当前源数据库中的总页数;

代码示例

备份示例
创建两个数据库:

sqlite3 *pDest;  
sqlite3 *pSource;
复制

数据库打开后,调用备份代码,如下:

sqlite3_backup *pBackup = sqlite3_backup_init(pDest, "main", pSource, "main");
if(pBackup)
{
    sqlite3_backup_step(pBackup, -1);
    sqlite3_backup_finish(pBackup);
}
else
{
    // sqlite3_errcode(pDest)打印错误
}
```操作结束后,记得关闭所有数据库。
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论