Delphi中的Sqlite数据库备份和还原

时间:2017-09-11 12:08:22

标签: android sqlite delphi

有没有办法在Android中使用Delphi 10.2 Firemonky FireFac备份和恢复SQLite数据库。 我使用以下代码,但它不生成任何备份文件,我想在SD卡中保存备份文件(目前尝试保存在当前目录中);

procedure TFMain.Button1Click(Sender: TObject);
var pathname : string;
begin
{$IFDEF ANDROID}
pathname := System.IOUtils.TPath.GetDocumentsPath;
{$ENDIF}
FDConnection1.DriverName := 'SQLite';
FDConnectionMain.Params.Values['Database'] := TPath.Combine(TPath.GetDocumentsPath, 'ConceptDB_Backup.s3db');
FDConnection1.Open();
    FDSQLiteBackup1.Database := System.IOUtils.TPath.Combine(pathname, 'ConceptDB.s3db');
    FDSQLiteBackup1.DestDatabaseObj := FDConnection1.CliObj;
    FDSQLiteBackup1.Backup;
    ShowMessage('Backup Successfully');
end;

1 个答案:

答案 0 :(得分:4)

如何备份SQLite数据库?

您的代码中有拼写错误。您已为其他对象定义了数据库名称。我不知道这些对象的含义,但如果您要将已打开的数据库(主要用于SQLite备份API)备份到由name定义的文件中,那么您可以编写如下代码:

<?php get_header(); ?>

<section class="jd-backdrop">
  <div class="jd-trans-row jd-container">
    <h2 class=""><?php the_title(); ?></h2>
    <br>
    <p class=""><?= get_post_field('post_content', $post->ID) ?></p>
  </div>
  <?php echo do_shortcode("[showtag tag='seefour']"); ?>
</section>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

或者按文件名定义源和目标数据库:

procedure TForm1.Button1Click(Sender: TObject);
var
  BackupPath: string;
  BackupFile: string;
begin
  BackupPath := System.IOUtils.TPath.GetDocumentsPath;
  BackupFile := System.IOUtils.TPath.Combine(BackupPath, 'MyBackup.db');

  FDSQLiteBackup1.DatabaseObj := FDConnection1.CliObj as TSQLiteDatabase;
  FDSQLiteBackup1.DestDatabase := BackupFile;
  FDSQLiteBackup1.Backup;
end;

整个事情是关于2个属性和一个方法调用。始终指定源对象或源文件名以及目标对象或目标文件名。

如何恢复SQLite数据库?

SQLite backup API创建的备份文件(由TFDSQLiteBackup组件使用)只是数据库副本,因此无论如何都不需要处理它们,并且可以以相同的方式打开作为他们原来的。

如何将文件写入外部存储器?

如果在项目设置中启用了写入外部存储选项,则可以使用外部存储(如果这是SD卡的含义),以及为备份文件构建路径,例如按using this code(它实现getExternalStorageDirectory方法)。您的代码可能会变成(未经测试):

procedure TForm1.Button1Click(Sender: TObject);
var
  CommonPath: string;
  SourceFile: string;
  BackupFile: string;
begin
  CommonPath := System.IOUtils.TPath.GetDocumentsPath;
  SourceFile := System.IOUtils.TPath.Combine(CommonPath, 'MySource.db');
  BackupFile := System.IOUtils.TPath.Combine(CommonPath, 'MyBackup.db');

  FDSQLiteBackup1.Database := SourceFile;
  FDSQLiteBackup1.DestDatabase := BackupFile;
  FDSQLiteBackup1.Backup;
end;