【问题标题】:Backup/restore sqlite db in android [duplicate]在android中备份/恢复sqlite db [重复]
【发布时间】:2012-11-21 21:19:43
【问题描述】:

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

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

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

【问题讨论】:

标签: android sqlite


【解决方案1】:

在文件夹“/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();

【讨论】:

  • @Ramkiran 它工作与否请告诉我.. 我有同样的要求
  • 如何恢复?
  • @OmidOmidi:要恢复数据库,您只需将 .db 文件复制到 /data/data//databases/foo.db 。这是你的问题吗?
  • 在第 1 行,我们可以使用以下命令,而不是硬编码 db 文件的路径:final String inFileName = context.getDatabasePath("db_name").getPath();
  • 这并不总是有效。 Sqlite 创建 wal(预写日志)文件,因此,您的 .db 文件可能已过时。
【解决方案2】:

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

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

android.app.backup 包包含用于使用 Android 备份代理的类,但它们实现了一个通用框架。您可以为要备份的每个文件或数据库实施具体细节。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多