首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将数据库文件备份到Android上的SD卡?

如何将数据库文件备份到Android上的SD卡?
EN

Stack Overflow用户
提问于 2010-01-03 23:45:55
回答 10查看 78.6K关注 0票数 59

我想在我的安卓应用程序中添加一项功能,自动将SQLite数据库备份到SD card

做这件事最好的方法是什么?有没有可用的例子或教程?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-01-04 01:21:31

SQLite数据库是完全独立的文件,并且是可移植的-您只需将整个文件直接复制到SD卡即可。

不过,首先我会检查设备中是否安装了SD卡,以及它的路径是什么(使用Environment.getExternalStorageDirectory())。

票数 10
EN

Stack Overflow用户

发布于 2010-04-18 18:19:10

这段代码对我来说很有效!

代码语言:javascript
复制
    try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath = "//data//{package name}//databases//{database name}";
            String backupDBPath = "{database name}";
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);

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

有没有人知道这在非root手机上是否有效?我只在一个带根的G1上尝试过。

票数 123
EN

Stack Overflow用户

发布于 2012-01-18 08:23:00

代码语言:javascript
复制
try {
    File sd = Environment.getExternalStorageDirectory();
    File data = Environment.getDataDirectory();

    if (sd.canWrite()) {
        String currentDBPath = "//data//"+ packageName +"//databases//"+dbList[0];
        String backupDBPath = dbList[0];
        File currentDB = new File(data, currentDBPath);
        File backupDB = new File(sd, backupDBPath);

        FileChannel src = new FileInputStream(currentDB).getChannel();
        FileChannel dst = new FileOutputStream(backupDB).getChannel();
        dst.transferFrom(src, 0, src.size());
        src.close();
        dst.close();
        Toast.makeText(getBaseContext(), backupDB.toString(), Toast.LENGTH_LONG).show();
    }
} catch (Exception e) {
    Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show();
}

这与上面的例子相反,在上面的例子中,"/“被"\”浪费了我生命中20分钟的时间来弄清楚,但我真的应该更早地看到这一点。Toast会告诉你文件放在哪里,或者当它不能工作时告诉你哪里出了问题。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1995320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档