2010-01-19 332 views
6

誰能告訴我如何在android中更新數據庫。我創建了一個嵌入式數據庫的應用程序。我更改了清單中數據庫的版本並創建了on update方法。我想測試它是否正確更新數據庫,但是當我使用adb命令時,只有-r將允許我重新安裝,但它會保留數據庫。有沒有辦法來運行adb命令,這將允許我更新數據庫。謝謝。更新數據庫Android

回答

2

看一看下面的資源,看看他們是有幫助的:

美味書籤
http://delicious.com/tag/android+adb
http://delicious.com/tag/android+database

DevX:在Android中創建和使用數據庫
http://www.devx.com/wireless/Article/40842

學習Android:數據庫編程
http://learnandroid.blogspot.com/2008/01/android-database.html

的Android數據庫軟件包摘要
http://developer.android.com/reference/android/database/package-summary.html

+0

感謝鏈接,但我沒有看到任何談論做adb重新安裝和更新數據庫。是否有可能這樣做,我的應用程序首次創建該數據庫的罰款,但只有在更新時它是崩潰。是否有需要輸入的清單條目? – user237259

+0

沒關係,我發現我做錯了什麼,經過一些研究後,我發現我沒有正確地放下桌子,當我重新創建桌子時,它會出錯。我最終正確刪除表,而不是調用oncreate命令,我只是寫了一個查詢來重新創建onupdate方法中的表。 – user237259

+0

我認爲如果你提供了一些例子而不是一堆(不相關的)鏈接,它會更有建設性。 –

3

什麼工作對我來說是改變數據庫的版本號。這是內容提供者的onCreate()方法使用的常數。如果您不爲數據庫使用內容提供程序,並且直接查詢它,則可能會出現類似的情況。請參閱源代碼示例here

+0

此博客文章解釋了Android如何進行數據庫升級的基礎知識 - http://www.unwesen.de/2009/09/07/android-development-database-upgrades/2/ – r1k0

1

對我而言,改變了我提供給DBOpenHelper類的版本號參數,該類擴展了SQLiteOpenHelper(用於創建/讀取/寫入/ etc ... Android數據庫的類)。當版本號參數遞增時,爲此參數的新值調用onUpdate()函數一次。

7

這裏是我會怎樣處理我的updateRow方法:

public void updateRow(long rowId, String code, String name) { 
     ContentValues args = new ContentValues(); 
     args.put("code", code); 
     args.put("name", name); 
     db.update(DATABASE_TABLE, args, "_id=" + rowId, null); 
} 
+1

有沒有辦法做到這一點爲多行同時,而不是每個調用「更新」? – Gaffi

1

如果通過更新你的意思是重建(因爲我在開發過程中做的時候我要開始與每一個我的應用程序啓動時一個全新的數據庫),然後加入此代碼之前,你在你的應用程序訪問數據庫:

this.getContext().getApplicationContext().deleteDatabase(DATABASENAME); 

OR

查找ŧ他的路徑到數據庫:

SQLiteHelper sql_database_helper = new SQLiteHelper(this.getContext().getApplicationContext()); 
File dbFile = getDatabasePath(DATABASENAME); 
Log.v("XIX","DB FILE PATH:"+dbFile.getAbsolutePath()); 

然後在命令提示符下刪除數據庫:

> adb devices 
List of devices attached 
3246%$%^$&17 device 
> adb shell 
$ su 
su 
rm mydatapath 

注意:您可能無法不開裂手機

說明訪問su命令: 如果你不想遵循r1k0給出的建議(如果你正在升級一個已經發布的應用程序,這可能是正確的做法),那麼你可以用下面的adb命令和一個restar你的應用程序將再次調用onCreate方法。

1

我不建議用這種方式:

public void updateRow(long rowId, String code, String name) { 
     ContentValues args = new ContentValues(); 
     args.put("code", code); 
     args.put("name", name); 
     db.update(DATABASE_TABLE, args, "_id=" + rowId, null); 
} 

您的應用程序將容易受到SQL注入攻擊,要做到這一點的最好辦法是這樣的:

public void updateRow(long rowId, String code, String name) { 
     ContentValues args = new ContentValues(); 
     args.put("code", code); 
     args.put("name", name); 
     String whereArgs[] = new String[1]; 
     whereArgs[0] = "" + rowId; 
     db.update(DATABASE_TABLE, args, "_id= ?", whereArgs); 
}