2014-04-14 45 views
0

我想將我的sqlite數據庫文件上傳到DropBox。但在此之前,我需要獲取代碼中的sqlite Db文件。我怎樣才能在任何設備上做到這一點?我檢查了this鏈接,它說用戶需要root權限才能訪問數據庫。以編程方式在文件中獲取應用程序sqlite數據庫

因此,在短期:

如何訪問我的SQLite數據庫與非root權限的設備?如File f = new File("path_to_db_file");

如果這種方法是不可能的,我該如何將我的應用程序數據庫保存在一個我可以訪問的地方?

請讓我知道,如果我可以解釋任何事情。謝謝你在前進

+0

以編程方式在SD文件夾上創建sqlite,那麼您將不需要root用戶的設備。如果你已經創建了一個sqlite數據庫,那麼如果你有有限的表,那麼創建一個代碼,它將讀取這些表中的值,並在SD卡的另一個位置創建它們的副本。 – Kedarnath

+0

@Kedarnath謝謝你的評論,你知道如何在指定位置創建數據庫嗎?目前我的數據庫類正在擴展SQLiteOpenHelper – user3524019

+0

http://stackoverflow.com/a/7227851/3330969 – Kedarnath

回答

0

當然可以,這樣的工作對我來說沒有root權限:

File Db = new File("/data/data/your.package/databases/yourdatabasename");   
Date d = new Date();   

File file = new File("your_destination.db"); 
file.setWritable(true); 

copyFile(new FileInputStream(Db), new FileOutputStream(file)); 

複製文件是這樣的功能,並在兩個方向上DB->文件和文件 - >工作DB:

public static void copyFile(FileInputStream fromFile, FileOutputStream toFile) throws IOException { 
    FileChannel fromChannel = null; 
    FileChannel toChannel = null; 
    try { 
     fromChannel = fromFile.getChannel(); 
     toChannel = toFile.getChannel(); 
     fromChannel.transferTo(0, fromChannel.size(), toChannel); 
    } finally { 
     try { 
      if (fromChannel != null) { 
       fromChannel.close(); 
      } 
     } finally { 
      if (toChannel != null) { 
       toChannel.close(); 
      } 
     } 
    } 
} 
+1

你確定你的設備沒有root?每次嘗試解決方案時,我都會收到一個沒有發現異常的文件 – user3524019

+0

我是一個懶惰的人,所以我沒有任何確定的設備,因爲該過程有時會有很多步驟。可能是數據庫的路徑不正確嗎?您可以使用下一行獲取路徑:context.getDatabasePath(DB_NAME).toString(); – Izuel

+1

謝謝你的建議,我已經嘗試過,但我只是得到FileNotFound異常,失敗 – user3524019

0

我不知道有關以編程方式,但使用植根設備我們可以從設備獲取數據庫中,我們必須做的權限將您的應用作爲超級用戶並從您的應用程序包名稱和過去複製到您的SD卡和Access。

相關問題