如何备份sqlite数据库?

时间:2014-09-04 21:34:18

标签: database sqlite backup

做正确的方法是什么? 我只是复制.sq3文件吗?

如果网站上有用户并且正在复制文件时正在编写文件,该怎么办?

3 个答案:

答案 0 :(得分:122)

sqlite3命令行工具具有.backup dot command

您可以使用以下方式连接到数据库:

sqlite3 my_database.sq3

并使用以下命令运行backup dot命令:

.backup backup_file.sq3

您可以使用

进行备份并关闭连接,而不是与数据库的交互连接
sqlite3 my_database.sq3 ".backup 'backup_file.sq3'"

无论哪种方式,结果都是数据库backup_file.sq3的名为my_database.sq3的副本。

它与常规文件复制不同,因为它会处理当前正在处理数据库的任何用户。在数据库上设置了正确的锁,因此备份是专门完成的。

答案 1 :(得分:0)

.backup是最好的方法。

sqlite3 my_database .backup my_database.back

您也可以尝试.dump命令,它使您能够将整个数据库或表转储到文本文件中。如果指定了TABLE,则仅转储与LIKE模式TABLE匹配的表。

sqlite3 my_database .dump > my_database.back

使用转储和存储制作存档副本的好方法,稍后重建数据库。

sqlite3 my_database .dump | gzip -c > my_database.dump.gz
zcat my_database.dump.gz | sqlite3 my_database

同时检查此问题Do the SQLite3 .backup and .dump commands lock the database?

答案 2 :(得分:-17)

try {
    final String inFileName = "/data/data/your app package/databases/db";
    File dbFile = new File(inFileName);
    FileInputStream fis = new FileInputStream(dbFile);
    String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/CALC/Backup";
    File dir = new File(path);
    if (!dir.exists()) dir.mkdirs();
    String outFileName = path + "/filename"; // output file name
    // Open the empty db as the output stream
    OutputStream output = new FileOutputStream(outFileName);

    // Transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = fis.read(buffer)) > 0) {
        output.write(buffer, 0, length);
    }
    Toast.makeText(getActivity(), "Backup Successfully", 2).show();
    // Close the streams
    output.flush();
    output.close();
    fis.close();
} 
catch (Exception e) {
    e.printStackTrace();
}