数据库是为模拟器创建的,但不是为Android设备创建的

时间:2015-02-14 12:56:09

标签: android database emulation device sqliteopenhelper

我正在创建一个Android应用程序,其中使用sqlite open helper创建数据库。当我在模拟器中安装我的应用程序时,它工作正常,但当我在手机中测试时,我没有看到在DDMS文件资源管理器中查看数据/数据创建的任何数据库。它是空的。这个你能帮我吗。

感谢。

2 个答案:

答案 0 :(得分:1)

您可以在模拟器上的 DDMS 应用程序私有文件(来自数据/数据目录)中查看,但无法查看没有root的设备。但这并不意味着数据库不存在。如果你想从真实设备获取数据库,你必须在它的根目录下或在你的应用程序中写一些代码,这些代码在sdcard上复制db文件。

答案 1 :(得分:1)

root android设备

编写用于将db文件复制到sdcard的代码

将数据库从/ data / data目录复制到sdcard的代码

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

        if (sd.canWrite()) {
            String currentDBPath = "//data//"+getPackageName()+"//databases//"+DB_NAME+"";
            String backupDBPath = "backupname.db";
            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();
            }

        }
        Toast.makeText(print.this, 
                   "Database Saved", Toast.LENGTH_LONG).show();
    }  catch (Exception e) {
        Toast.makeText(print.this, 
                   "Error="+e, Toast.LENGTH_LONG).show();
        Log.i("FO","exception="+e);
    }


}