2013-12-23 30 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

現在你有數據庫。 –

相關問題