2012-05-23 159 views
4

我已經構建了一個應用程序,現在我想使用我的新備份應用程序複製正在運行的應用程序的數據庫。我做DB_PATH + DB_NAME,使用以下值創建我的數據庫路徑:從另一個應用程序訪問一個應用程序的數據庫

DB_PATH = "/data/data/iCam.Cam/"; 
DB_NAME = "testdb.db"; 

我有代碼拷貝從給定的路徑SD卡數據庫。然而,當我使用下面的方法首先檢查數據庫,它返回false

public boolean checkDataBase() {  
    SQLiteDatabase checkDB = null; 

    try { 
     String myPath = DB_PATH + DB_NAME; 
     checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 
    } catch (SQLiteException e) { 
     e.fillInStackTrace(); 
     // database does't exist yet. 
    } 

    if (checkDB != null) { 
     checkDB.close(); 
    } 

    return checkDB != null ? true : false; 
} 

就如何實現這一目標有什麼建議?

+0

@ Rasel的回答是正確的。您應該使用實際應用程序中的contentProvider來共享數據庫控制。你爲什麼要複製它? – drulabs

+0

我想複製它因爲我的應用程序發送數據庫到服務器,但它目前不發送一些數據將被上傳到網絡,所以我需要該數據庫複製到SD卡,以便我可以通過郵件發送 – Trikaldarshi

回答

8

訪問,則可以使用同一個數據庫,只有當你在自定義內容提供商創建運行的應用程序數據庫。

您不能直接從正在運行的應用程序訪問數據庫。

但是,如果您在自定義內容提供程序中創建正在運行的應用程序數據庫,則可以在權限的幫助下直接訪問數據庫。

在這種情況下,您甚至不需要複製該數據庫。

請將此link用於定製內容提供者。

3
​​ 讀DDMS的教程

除非應用程序通過ContentProvider爲您提供接口,否則無法訪問其他應用程序的數據庫。

2

Android Security. 由應用程序存儲的所有數據都將被賦予一個應用程序的用戶ID,而不是通常對其他包

相關問題