当前位置: 首页 > 知识库问答 >
问题:

将备份同步到android中的google drive

路和悌
2023-03-14

我在Android中创建了一个SQLite数据库的备份,并希望将其同步到Google Drive。备份未同步,并且以下代码没有错误:

public class Synchorize extends Activity {
    static final int REQUEST_ACCOUNT_PICKER = 1;
    static final int REQUEST_AUTHORIZATION = 2;
    private static Drive service;
    private static Uri fileUri;

    private GoogleAccountCredential credential;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.synchronize);
        credential = GoogleAccountCredential.usingOAuth2(this,
                Arrays.asList(DriveScopes.DRIVE));
        startActivityForResult(credential.newChooseAccountIntent(),
                REQUEST_ACCOUNT_PICKER);

    }

    @Override
    protected void onActivityResult(final int requestCode,
            final int resultCode, final Intent data) {
        switch (requestCode) {
        case REQUEST_ACCOUNT_PICKER:
            if (resultCode == RESULT_OK && data != null
                    && data.getExtras() != null) {
                String accountName = data
                        .getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
                if (accountName != null) {
                    credential.setSelectedAccountName(accountName);
                    service = getDriveService(credential);
                    saveFileToDrive();

                }
            }
            break;
        }

    }

    private Drive getDriveService(GoogleAccountCredential credential) {
        return new Drive.Builder(AndroidHttp.newCompatibleTransport(),
                new GsonFactory(), credential).build();
    }

    private void saveFileToDrive() {
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {

                try {
                    // File's binary content
                    fileUri = Uri
                            .fromFile(new java.io.File(
                                    Environment.getDataDirectory().getPath()
                                            + "/data/com.example.note_taking/databases/notes.db"));
                    java.io.File fileContent = new java.io.File(fileUri.getPath());


                    FileContent mediaContent = new FileContent(getMimeType("db"), fileContent);

                    // File's metadata.
                    com.google.api.services.drive.model.File body = new com.google.api.services.drive.model.File();
                    body.setTitle(fileContent.getName());
                    body.setMimeType(getMimeType("db"));

                    com.google.api.services.drive.model.File file = service
                            .files().insert(body, mediaContent).execute();
                    if (file != null) {
                        Toast.makeText(getApplicationContext(),
                                "Backup Uploaded Successfully",
                                Toast.LENGTH_LONG).show();
                        finish();

                    }
                } catch (UserRecoverableAuthIOException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        });
        t.start();
    }

    public String getMimeType(String url) {
        String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
                url);
        return mimeType;
    }
}

共有1个答案

白云
2023-03-14

如果SQLite数据库没有被连接(在任何进程中)保持打开状态,那么它只是一个普通文件,可以像任何其他普通文件一样被复制。如果SQLite数据库被一个连接保持打开状态,但没有事务(特别是没有更新)在进行中,那么像这样备份它也应该没有问题。

当您打开事务时,这些事务正在执行更新,情况就会变得可怕。特别是,您将依赖于将来能够使DB处于一致的状态,尽管备份在“随机的时间”发生,与对文件的写入有关。那是……不可取的。您最好进行连接,附加备份DB文件,打开自己的事务,然后将事务中的数据复制到其他DB。然后,提交事务后,您可以安全地复制备份DB文件,因为您可以相当确定,没有任何其他连接将在其上打开。这样做的主要缺点是,在DB上打开的事务相对较长,但SQLite没有DB服务器那样复杂的锁定模型,因此您只能使用它;要想获得进程内DB的优势,至少有一些缺点。

 类似资料:
  • 我使用Hazelcast作为分布式键值存储。我将储存大约。100K密钥,为了加强hazelcast集群节点之间的数据一致性,我使用了与IMap作为分布式数据结构的同步备份。 在2个Unix盒中运行包含2个节点的hazelcast集群,问题是:在任一个节点中加载1000条记录的示例数据时,我看不到同步备份发生,尽管我已经明确地将同步备份设置为1,并从日志和hazelcast管理中心对其进行了验证。当

  • 本文向大家介绍linux定时备份mysql并同步到其它服务器,包括了linux定时备份mysql并同步到其它服务器的使用技巧和注意事项,需要的朋友参考一下 数据在任何一家公司里面都是最核心的资产,定期备份则是为了保证数据库出现问题的时候能够及时回滚到最近的备份点,将损失缩小到最小 这篇文章将会两部分来说明: 1、mysql的定期备份; 2、同步到其它服务器 mysql 备份 备份还原某个数据库 备

  • 本文向大家介绍Oracle自动备份及自动备份步骤,包括了Oracle自动备份及自动备份步骤的使用技巧和注意事项,需要的朋友参考一下 数据是应用的核心部分,程序坏了换台机器重新发布就可以,但数据一旦丢失,造成的损失将不可挽回,程序发布到生产后,数据的备份便显得尤为重要,由于不一定所有的服务均有资金完成高级的备份如RAC和DG,在我们只有一台数据库服务器的,暂时采取最简单的备份策略,export出dm

  • 在本文中,我们将学习如何将PostgreSQL备份存储到MinIO Server。 1. 前提条件 从这里下载并安装mc。 从这里下载并安装MinIO Server。 PostgreSQL官方文档. 2. 配置步骤 MinIO服务正在使用别名m1运行。从MinIO客户端完整指南MinIO客户端完全指南了解详情。PostgreSQL备份存储在pgsqlbkp目录下。 创建一个存储桶。 mc mb m

  • 在本文中,我们将学习如何将MongoDB备份存储到MinIO Server。 1. 前提条件 从这里下载并安装mc。 从这里下载并安装MinIO Server。 MongoDB官方文档. 2. 配置步骤 MinIO服务正在使用别名minio1运行。从MinIO客户端完整指南MinIO客户端完全指南了解详情。MongoDB备份存储在mongobkp目录下。 创建一个存储桶。 mc mb minio1

  • 在本文中,我们将学习如何将MySQL备份存储到MinIO Server。 1. 前提条件 从这里下载并安装mc。 从这里下载并安装MinIO Server。 MySQL官方文档 2. 配置步骤 MinIO服务正在使用别名m1运行。从MinIO客户端完整指南MinIO客户端完全指南了解详情。MySQL备份存储在mysqlbkp目录下。 创建一个存储桶。 mc mb m1/mysqlbkp Bucke