将SQLite数据库复制到另一个路径

时间:2012-09-05 06:45:51

标签: linux sqlite

我正在temp文件夹中创建一个sqlite数据库。现在我想将该文件复制到另一个文件夹。是否有任何sqlite命令重命名sqlite数据库文件?

我尝试在c ++中使用重命名功能,但它返回错误18.错误号18表示:“包含名称newname的目录必须与文件位于同一文件系统上(如名称oldname所示)”。

有人可以建议更好的方法来做到这一点。

2 个答案:

答案 0 :(得分:5)

在正确的文件系统上使用临时目录!

首先,sqlite数据库只是一个文件。它可以随意移动或复制,只要:

  • 上次正确关闭,所以在期刊
  • 中没有回滚的东西
  • 如果它使用预写日志类型的日志,则它是完全检查点。

因此将其作为文件移动是正确的。现在有两种方法可以移动文件:

  • 使用rename系统调用。
  • 复制文件并删除旧文件。

前者有很多优点:它不能留下部分写入的文件,它不能留下两个文件,它是非常快的,如果你用它来重命名旧文件,没有目标的目标name不存在(最后是POSIX语义,Windows可以在NTFS上执行,但不能在FAT文件系统上执行)。它还有一个重要的缺点:它只能在文件系统中运行。所以你必须:

  • 如果要重命名它以确保在进程失败时不留下部分写入的文件,则需要使用重命名,因此必须在同一文件系统上使用临时位置。通常这是通过在同一目录中使用不同的名称而不是使用临时目录来完成的。
  • 如果您要重命名,因为目的地可能很慢,例如因为你想把它放在网络共享上,你显然想在不同的文件系统上使用临时目录。这意味着您必须读取文件并以新名称编写。在标准的C或C ++库中没有这个功能,但是很多库都会有一个(而且像python这样的高级语言会有一个,你总是可以执行/bin/mv来为你完成)。 / LI>

答案 1 :(得分:0)

  

现在,我想将该文件复制到另一个文件夹。是否有任何sqlite命令重命名sqlite数据库文件?

关闭数据库。使用外壳程序将数据库复制到新路径。

另请参见Distinctive Features Of SQLite

  

稳定的跨平台数据库文件

     

SQLite文件格式是跨平台的。写入的数据库文件   可以将一台计算机复制到另一台计算机上并在另一台计算机上使用   不同的架构。大端或小端,32位或64位   没关系。所有机器都使用相同的文件格式。此外,   开发人员已保证保持文件格式稳定,并且   向后兼容,因此较新版本的SQLite可以读写   较旧的数据库文件。

     

大多数其他SQL数据库引擎要求您转储并还原   数据库从一个平台迁移到另一个平台时   升级到该软件的较新版本。

相关问题