在android中备份/恢复sqlite db

时间:2012-11-21 21:19:43

标签: android sqlite

  

可能重复:
  Android backup/restore: how to backup an internal database?

我正在开发一个有SQL lite db的应用程序。我需要让用户能够备份数据库并再次恢复它。我怎样才能做到这一点?示例代码?

如果我的用户保存了数据库,然后将应用程序升级到新的数据库版本代码,那还能恢复工作吗?我该怎么做?

2 个答案:

答案 0 :(得分:39)

在“/data/data/'your.app.package'/databases/”文件夹中,您有一个.db文件,它是您的数据库。您可以复制该文件,保存,然后再将其放回原处。

关于如何将数据库备份到外部存储的一个示例:

    final String inFileName = "/data/data/<your.app.package>/databases/foo.db";
    File dbFile = new File(inFileName);
    FileInputStream fis = new FileInputStream(dbFile);

    String outFileName = Environment.getExternalStorageDirectory()+"/database_copy.db";

    // 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);
    }

    // Close the streams
    output.flush();
    output.close();
    fis.close();

答案 1 :(得分:3)

你能用“备份”来澄清你的意思吗? SQLite没有特定的备份方法;你必须从数据库中读取行并以某种方式保存它们。许多开发人员使用XML来执行此操作。

如果用户保存数据库,然后转到新的数据库版本代码,则必须决定如何进行恢复。同样,必须完成读取备份并将其放回数据库的工作; SQLite和Android都不会为你做这件事。

软件包android.app.backup包含用于处理Android备份代理的类,但它们实现了一般框架。您需要为要备份的每个文件或数据库实现详细信息。