我正在尝试实现简单的SQLite导出/导入以进行备份.导出只是存储原始current.db文件的副本.我想要导入的是删除旧current.db文件并将imported.db文件重命名为current.db.这可能吗?当我尝试这个解决方案时,我收到以下错误:
06-30 13:33:38.831: ERROR/SQLiteOpenHelper(23570):
android.database.sqlite.SQLiteDatabaseCorruptException: error code 11: database disk image is malformed
Run Code Online (Sandbox Code Playgroud)
如果我在SQLite浏览器中查看原始数据库文件,它看起来很好.
所以我刚接触到android中的数据库,我似乎无法弄清楚如何查看创建的数据库.
我在我的主要活动类中创建了数据库适配器类.
我在模拟器中运行它没有任何问题,但我如何查看内容?本书即时阅读说"使用DDMS检查Android设备/模拟器的文件系统.数据库是在数据库文件夹下创建的",并在Eclipse中的数据库文件夹下有一个数据库的图像.我不知道第一部分的真正意义(使用DDMS?)并且不知道人们提到的/ data/data文件夹在哪里.
即使在CMD中运行SQLite3并输入".tables"也不会产生任何数据库.
当您使用模拟器时,您的sqlite文件存储在主应用程序文件夹附近的文件夹中,您可以下载它.但是,在没有root设备的情况下无法访问此功能.如何以编程方式备份SD卡中现有的sqlite文件?
我希望在我的应用程序中有一个按钮,将该文件存储在SD卡的特殊路径中.可能吗?
谢谢,
我需要在移动设备的内部存储或 SD 卡中对 SQLite 数据库进行离线备份。但我无能为力,这怎么可能。
我在 SO 上关注了许多线程,但他们建议将 DB 一个位置复制到另一个位置,这不适合我,也不适合Google Drive.
任何指导都是宝贵的。
我希望允许我的 Android 应用程序的用户为他们创建的内容导出 SQLite 数据库文件。我当前的解决方案将文件复制到私有存储 ( /data/data/com.package.name/files/Content.db),然后为此文件创建一个 URI 并打开共享对话框。这是有效的,例如,允许我使用 Dropbox 导出数据库文件。这是我正在使用的代码,部分改编自/sf/answers/186331771/ -
private void exportContent() {
copyContentToPrivateStorage();
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("application/octet-stream");
Uri uri = new FileProvider().getDatabaseURI(this);
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(intent, "Backup via:"));
}
private void copyContentToPrivateStorage() {
// From /sf/answers/186331771/
try {
File data = Environment.getDataDirectory();
File sd = getFilesDir();
if (sd.canWrite()) {
String currentDBPath = "//data//com.package.name//databases//Content.db";
String backupDBPath = "Content.db";
File currentDB = new File(data, currentDBPath);
File backupDB = new File(sd, backupDBPath);
if (currentDB.exists()) { …Run Code Online (Sandbox Code Playgroud)