我正在尝试将备份和恢复应用程序数据库的功能整合到google drives应用程序文件夹中(对用户不可见)。我浏览了为android提供的基本设置指南,可以让用户授权应用程序,并到达onConnected方法被调用的点。
我面临的问题是,我不知道如何将数据库文件(.db)从设备“发送”到googledrive-app文件夹。谷歌分享了创建新文件的片段,但仅此而已。我确实发现了一个之前被问到的问题,这个问题与我正在寻找的Google驱动器相似,它可以备份和恢复数据库以及Android应用程序的共享首选项,但又不是我想要的。
搜索谷歌可能不会返回任何有用的链接,因为这是一个相对较新的api。
更新1:
共享onConnted()代码,
public void onConnected(Bundle bundle) {
Toast.makeText(GoogleSignIn.this, "In onConnected activity", Toast.LENGTH_SHORT).show();
// Testing to see if database is indeed uploaded to google drive app folder
String db_name = "XXX_DB";
String currentDBPath = "/data/" + "com.abc.efg" + "/databases/" + db_name;
saveToDrive(
Drive.DriveApi.getAppFolder(mGoogleApiClientDrive),
"XXX_DB.db",
"application/x-sqlite3",
new java.io.File(currentDBPath)
);
}
更新2:
下面分享的解决方案非常适合将数据库上传到google drive应用程序文件夹。对于那些可能面临类似问题的人,请尝试将数据库路径更改为< code > "/data/data/com . ABC . EFG/databases/" db _ name ,而不是< code > "/data/com . ABC . EFG/databases/" db _ name
下一步是能够从谷歌驱动器应用程序文件夹中检索和恢复数据库。如果我能让它工作,将更新这个问题。
假设您有一个MyDbFile.db文件的路径,您可以使用这样的构造:
...
saveToDrive(
Drive.DriveApi.getAppFolder(getGoogleApiClient()),
"MyDbFile.db",
"application/x-sqlite3",
new java.io.File("\...\...\...\MyDbFile.db")
);
...
DriveId mDriveId;
/******************************************************************
* create file in GOODrive
* @param pFldr parent's ID
* @param titl file name
* @param mime file mime type (application/x-sqlite3)
* @param file file (with content) to create
*/
void saveToDrive(final DriveFolder pFldr, final String titl,
final String mime, final java.io.File file) {
if (getGoogleApiClient() != null && pFldr != null && titl != null && mime != null && file != null) try {
// create content from file
Drive.DriveApi.newDriveContents(getGoogleApiClient()).setResultCallback(new ResultCallback<DriveContentsResult>() {
@Override
public void onResult(DriveContentsResult driveContentsResult) {
DriveContents cont = driveContentsResult != null && driveContentsResult.getStatus().isSuccess() ?
driveContentsResult.getDriveContents() : null;
// write file to content, chunk by chunk
if (cont != null) try {
OutputStream oos = cont.getOutputStream();
if (oos != null) try {
InputStream is = new FileInputStream(file);
byte[] buf = new byte[4096];
int c;
while ((c = is.read(buf, 0, buf.length)) > 0) {
oos.write(buf, 0, c);
oos.flush();
}
}
finally { oos.close();}
// content's COOL, create metadata
MetadataChangeSet meta = new Builder().setTitle(titl).setMimeType(mime).build();
// now create file on GooDrive
pFldr.createFile(getGoogleApiClient(), meta, cont).setResultCallback(new ResultCallback<DriveFileResult>() {
@Override
public void onResult(DriveFileResult driveFileResult) {
if (driveFileResult != null && driveFileResult.getStatus().isSuccess()) {
DriveFile dFil = driveFileResult != null && driveFileResult.getStatus().isSuccess() ?
driveFileResult.getDriveFile() : null;
if (dFil != null) {
// BINGO , file uploaded
dFil.getMetadata(getGoogleApiClient()).setResultCallback(new ResultCallback<MetadataResult>() {
@Override
public void onResult(MetadataResult metadataResult) {
if (metadataResult != null && metadataResult.getStatus().isSuccess()) {
DriveId mDriveId = metadataResult.getMetadata().getDriveId();
}
}
});
}
} else { /* report error */ }
}
});
} catch (Exception e) { e.printStackTrace(); }
}
});
} catch (Exception e) { e.printStackTrace(); }
}
/*******************************************************************
* get file contents
*/
void readFromGooDrive() {
byte[] buf = null;
if (getGoogleApiClient() != null && getGoogleApiClient().isConnected()) try {
DriveFile df = Drive.DriveApi.getFile(getGoogleApiClient(), mDriveId);
df.open(getGoogleApiClient(), DriveFile.MODE_READ_ONLY, null)
.setResultCallback(new ResultCallback<DriveContentsResult>() {
@Override
public void onResult(DriveContentsResult driveContentsResult) {
if ((driveContentsResult != null) && driveContentsResult.getStatus().isSuccess()) {
DriveContents cont = driveContentsResult.getDriveContents();
// DUMP cont.getInputStream() to your DB file
cont.discard(getGoogleApiClient()); // or cont.commit(); they are equiv if READONLY
}
}
});
} catch (Exception e) { e.printStackTrace(); }
}
祝你好运
本文向大家介绍数据库备份与恢复,包括了数据库备份与恢复的使用技巧和注意事项,需要的朋友参考一下 必须备份数据库,以防原始数据库由于任何原因损坏或丢失。使用此备份,可以恢复故障之前的数据库。 数据库备份基本上意味着为了安全起见,将创建数据库信息和数据的副本并将其存储在备份服务器中。事务日志也与数据库数据一起存储在备份中,因为没有它们,数据将无用。 数据库失败的原因 数据库故障可能有多种原因,因此需要
问题内容: 我已经卸载了旧的XAMPP并删除了其中的所有内容并安装了新的XAMPP 。当我将备份文件夹(具有我的数据库名称,包含所有和文件)复制到时,该数据库显示在phpmyadmin的列表中,但没有表和数据。我做错了什么? 问题答案: 我搜了很多。还有一些其他文件需要恢复。我认为仅从.frm文件中恢复表是不可能的。我已经重新创建了数据库。
升级、备份和恢复 数据库升级 数据库升级的推荐方案是,老版本的数据库的数据备份成 SQL 脚本的方式,在新版本的数据库上执行这些 SQL 来恢复数据。 使用 Script 工具备份数据 备份数据库有多种方式。如可以直接拷贝数据库文件,但是不建议在数据库在使用的时候去拷贝文件,另外数据库文件是二进制的,不能直接读懂,并且数据库文件可能会比较大,推荐的备份方式是创建压缩的 SQL 脚本文件,并且 H2
到目前为止,我一直在使用备份我的postgresql数据,它将数据导出到sql文件,然后使用
Redis SAVE 命令用于创建当前数据库的备份。 语法 redis Save 命令基本语法如下: redis 127.0.0.1:6379> SAVE 实例 redis 127.0.0.1:6379> SAVE OK 该命令将在 redis 安装目录中创建dump.rdb文件。 恢复数据 如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。
主要内容:Redis 数据备份与恢复,1.SAVE 命令,2.恢复数据,3.BgsaveRedis 数据备份与恢复 1.SAVE 命令 Redis SAVE 命令用于创建当前数据库的备份。 实例 2.恢复数据 如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令,如下所示: 以上命令 CONFIG GET dir 输出的 redis 安装目录为 /usr/local/redis/bin。