2012-07-25 41 views
0

好了,所以我的Android應用程序利用了預先存在的數據庫中,這是我訪問使用從數據庫中該寫入預先存在的SQLite數據庫的Android

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

現在我沒有問題讀取數據,但我似乎無法補充。問題是數據庫文件從不更新,只有當時運行的數據庫實例。我需要對數據庫所做的更改是永久性的,所以我試圖序列化數據庫實例,但發現它無法完成。我認爲在添加到數據庫實例之後,我需要將其導出到文件中,並用它覆蓋數據庫文件。我不確定我會如何去做,並閱讀了上述網站的每一條評論,並且也經歷了無數帖子。

我可能是錯的,但那是我能想象它完成的唯一方法。

public void addTenantWithoutProperty(String name, String email, String phone){ 

    //This method reads from my database 
ArrayList<Tenants> tenants = (ArrayList<Tenants>) getAllTenants(); 

//Checks data in the database before I try add to it 
for(int i = 0;i < tenants.size();i++){ 
String name; 
name = tenants.get(i).getName(); 

System.out.println(i + " before " + names); 
} 

//I have also tried adding to it using ContentValues, but it makes no difference 
String tenantsql = "INSERT INTO tenants (name, phone, email) VALUES ('" + name + "','"   
+ phone + "','" + email + "')"; 


myDataBase.execSQL(tenantsql); 


tenants = (ArrayList<Tenants>) getAllTenants(); 



//checks data in database after insertion 
for(int i = 0;i < tenants.size();i++){ 
    String names; 
    names = tenants.get(i).getName(); 

    System.out.println(i + " after " + names); 
} 


} 

這就是所謂的點擊一個按鈕,輸出顯示正在添加的數據,但它不會導致數據庫中的永久性改變。我怎樣才能解決這個問題?任何幫助都將不勝感激

編輯:已解決! if語句在createDataBase()中讀取if(!dbExist),更改爲if(dbExist)並正常工作。問題是,即使數據庫存在,它也被我的資產文件夾中的數據庫文件覆蓋。感謝您的答覆,無論

+2

您的數據庫myDataBase是否已使用WRITE權限打開?這個例子似乎是打開一個只讀實例。 – mhradek 2012-07-25 17:52:05

+0

是的,這裏是openDataBase方法中的代碼: myDataBase = SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READWRITE); – dunika 2012-07-25 18:16:18

+1

作爲一種解決方法,您是否嘗試過創建自己的數據庫並將數據從所提供的數據複製到您創建的數據庫中? – Tanaki 2012-07-25 18:25:20

回答

1

正如mhradek說你的SQLite DataBaseHelper類似乎與READONLY許可,在這裏打開數據庫:

checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 

你可能想嘗試使用讀寫權限打開數據庫將OPEN_READONLY標誌更改爲OPEN_READWRITE。這將導致下面的代碼:

checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); 

谷歌的Android文檔解釋了這裏Android OPEN_READONLY Flag

兩個標誌這也許可以解釋爲什麼點擊按鈕似乎添加數據,但數據庫不被永久改變,因爲它如果以這種方式打開,則無法寫入。

讓我知道如果改變國旗適合你。

乾杯!

+0

不讀我的代碼讀取像這樣:checkDB = SQLiteDatabase.openDatabase(myPath,null ,SQLiteDatabase.OPEN_READWRITE);我經歷了整件事,並改變了我能找到的所有READ_ONLY。 – dunika 2012-07-25 18:18:31