總網頁瀏覽量

關於我自己

我的相片
人生的必修課是接受無常,人生的選修課是放下執著。

2014年6月9日 星期一

[Android] 沒有root,還是想抓到.db /取出db檔

程式開發中若涉及SQLite,會很需要常常查看資料庫.db檔來檢視資料的存取正不正確。

但root過的device才能在Eclipse> DDMS> File Explorer>  /data/data/<package_name>/databases/資料庫名.db ←找到.db檔

從電腦終端機執行adb shell想把.db檔pull出來, 又有「opendir failed, Permission denied」的問題←因為沒root

如果很不想root device,又想要看.db檔,該怎麼做呢?

這裡提供一個方法,在程式中寫段code把.db檔copy到指定目錄下




// 先建立過Cursor才會產生.db檔



public static boolean copyFile(){
     try{
      String sourceFile = "/data/data/com.tsots.PieFee/databases/PieFee.db";
      String destFile = Environment.getExternalStorageDirectory() + "/PieFee/Log/PieFee.db";
      //File file1 = new File(sourceFile);
      //Log.d("522","file1存在嗎?"+file1.exists());
      //File file2 = new File(destFile);
      //Log.d("522","file2存在嗎?"+file2.exists());
      
      File file = new File(destFile);
      if(!file.exists()) {
          Log.d("522","路徑之前不存在, 新建立");
          file.getParentFile().mkdirs();
         }
      
         InputStream in = new FileInputStream(sourceFile);
         OutputStream out = new FileOutputStream(destFile);
         byte[] buf = new byte[8192];
         int len;
         while ((len = in.read(buf)) > 0){
          out.write(buf, 0, len);
         }
         in.close();
         out.close();
         Log.d("522","save file["+destFile+"] ok from["+sourceFile+"]");
     } catch(FileNotFoundException ex){
      Log.d("522", "File Not Found Exception " + ex.toString());
      return false;
     } catch (IOException io){
         return false;
        }
  return true;
 }


那麼在Eclipse> DDMS> File Explorer> /storage/sdcard0/PieFee/Log/PieFee.db,就可以拿到這個.db檔囉!

沒有留言:

張貼留言