安卓数据库备份

标签 android android-sqlite

几个月前,我制作了一个 Android 应用。但当时,我并不认为我需要备份我的数据库。事实是,现在我做了,但我没有实现。

现在,我是否可以在不丢失数据的情况下进行数据库备份?因为我认为如果我为我的数据库备份创建方法,当我构建应用程序时,我将丢失所有数据,因为我有这个方法:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + POINTS_TABLE);
    db.execSQL("DROP TABLE IF EXISTS " + NETWORKS_TABLE);
    onCreate(db);
}

最佳答案

复制db文件到sdcard是一种备份方式

public static void copyFileInSDCard () {

    try {
        File sd = Environment.getExternalStorageDirectory ();
        File data = Environment.getDataDirectory ();

        if (sd.canWrite ()) {
            String DATABASE_NAME = "YOURDBNAME";
            String currentDBPath = "//data//your.package//databases//" + DATABASE_NAME;
            String backupDBPath = "FILE[Name]";
            File currentDB = new File (data, currentDBPath);
            File backupDB = new File (sd, backupDBPath);

            if (currentDB.exists ()) {
                @SuppressWarnings("resource")
                FileChannel src = new FileInputStream (currentDB).getChannel ();
                @SuppressWarnings("resource")
                FileChannel dst = new FileOutputStream (backupDB).getChannel ();
                dst.transferFrom (src, 0, src.size ());
                src.close ();
                dst.close ();
            }
        }
    }
    catch (Exception e) {
        e.printStackTrace ();
    }
}

关于安卓数据库备份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27524009/

相关文章:

android - 使用 CONFLICT_REPLACE 插入时出现 SQLiteException "cannot commit - no transaction is active"

android - 通过连接 2 列从数据库表中获取值

Android TextView - 每 20 个字符后添加一个新行

java - Android View 或 Activity ?

android - Android 版 Chrome - 将网络应用程序添加到主屏幕

java - 如何访问另一个应用程序数据库并插入一些记录

java - 没有请求的Android sqlite舍入数字

android - 如何通过主页按钮检测应用程序是否为 "minimized"或隐藏在另一个 Activity 后面

java - Android:自定义RecyclerView中的单行

java - SQLite 数据库问题