2013-12-23 28 views
1

我需要查看我的android设备中的数据库,但由于它是一个根目录设备,我无法这样做。我在我的DBAdapter类中实现了以下代码,并在其他活动中调用它。如何查看Android设备中的数据库?

CODE:

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命令,但没有一个能够工作。你能告诉我上面的代码出错了吗?还是上述解决方案的替代方案?帮助将不胜感激的家伙。

+0

我在查看文件资源管理器中的SDCard内容时有另一个疑问。我无法查看DDMS Filexplorer中的SD卡内容。我只需要检索数据库以在SQLiteBrowser中查看它。我该怎么做 ? – San

回答

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) 
         {} 
        } 
+0

会给这个尝试,让你知道。感谢您的努力。 – San

+0

您必须将sdcard写入和读取权限添加到您的manifest.xml文件中。 –

+0

我在清单文件中添加了这两个权限,但无法确认数据库文件(我不想在移动设备中查看数据库)的存在。另外一个疑问是,我是否只需要在FileOutputStream中提供现有的文件夹名称,或者它会创建我输入的文件夹名称? – San

1

由于文件backupDB实际上并不存在,因此您没有获取输出。 文件backupDB =新文件(sd,backupDBPath); - 这只会创建一个逻辑文件对象,它可能不会物理存在。所以您应该调用,

backupDB.createNewFile(); 

为了物理创建一个文件。

+0

谢谢nikvs。多谢。 – San

2

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

+0

谢谢帕尔。我已经知道这一点,但它并没有打动我深入DDMS的搜索。谢谢一堆,但。 – San

+0

现在你有数据库。 –

相关问题