如何在Android设备中查看数据库?

时间:2013-12-23 06:00:34

标签: android sqlite

我需要在我的Android设备中查看数据库,但由于它是一个非root用户设备,我无法这样做。我在DBAdapter类中实现了以下代码,并在另一个活动中调用它。

代码:

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

            if (sd.canWrite()) {
                String currentDBPath = "//data//" + "com.example.facebook_integration"
                        + "//databases//" + "image_database.db";
                String backupDBPath = "//sdcard//FBDatabase";
                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(getApplicationContext(), "Backup Successful!",Toast.LENGTH_SHORT).show();

            }
        } catch (Exception e) {

            //Toast.makeText(getApplicationContext(), "Backup Failed!", Toast.LENGTH_SHORT).show();

        }
    }

但上面的代码似乎不起作用。我已经在Stackoverflow中很好地浏览了这个问题(有一些安静)并且还尝试了adb命令,但它们都没有用。您能否告诉我上述代码出错的地方或上述解决方案的替代方案?帮助将非常感谢伙计们。

3 个答案:

答案 0 :(得分:2)

您可以将数据库转储到SD卡中,然后打开SQLite数据库工具的SQLite管理器:

    File f=new File("/data/data/yourapppackagename/databases/database");
                    FileInputStream fis=null;
                    FileOutputStream fos=null;

                    try
                    {
                      fis=new FileInputStream(f);
                      fos=new FileOutputStream("/mnt/sdcard/folder/database.db");
                      while(true)
                      {
                        int i=fis.read();
                        if(i!=-1)
                        {fos.write(i);}
                        else
                        {break;}
                      }
                      fos.flush();
                      Toast.makeText(getParent(), "DB dump OK", Toast.LENGTH_LONG).show();
                    }
                    catch(Exception e)
                    {
                      e.printStackTrace();
                      Toast.makeText(getParent(), "DB dump ERROR", Toast.LENGTH_LONG).show();
                    }
                    finally
                    {
                      try
                      {
                        fos.close();
                        fis.close();
                      }
                      catch(Exception ioe)
                      {}
                    }

答案 1 :(得分:2)

DDMS您只需选择数据库文件,然后导出到您的系统中。

答案 2 :(得分:1)

您没有获得输出,因为您的文件backupDB实际上不存在。 文件backupDB =新文件(sd,backupDBPath); - 这只会创建一个逻辑文件对象,它可能不是物理存在的。所以你应该打电话,

backupDB.createNewFile();

以物理方式创建文件。