2010-04-01 44 views
6

在一些書和網上我看到的是創建 數據庫之後,這些方法調用正在取得:Android的SQLite數據庫語言環境,鎖定和版本

db.setLocale(Locale.getDefault()); 
db.setLockingEnabled(true); 
db.setVersion(DB_VERSION); 

這是爲什麼呢?據我所知,在創建新數據庫後,系統添加一個名爲android_metadata的表,其中一個字段名爲 區域設置,該表有一行,區域設置字段設置爲 「en_US」。現在我假設該列具有該值,因爲我使用的是美國電話 ,如果我使用的是來自不同地區的電話,則 區域設置字段將被適當設置。任何人都可以確認嗎? 我猜測setLocale方法只會在 的情況下有用,您可以在電話上安裝預建數據庫,然後想要 更改區域設置以匹配電話的區域設置。聽起來對嗎?

setLockingEnabled的文檔說它默認爲true,所以 沒有必要進行該調用,對吧?

最後,setVersion的調用是什麼?我無法找到 包含此信息的表格,因此我一直假定數據庫文件 本身在某處存儲版本號。因此,當我創建一個 數據庫時,需要您在調用SQLiteOpenHelper構造函數時已指定版本號 ,則調用setVersion時沒有 點。再說一次,也許這種方法存在於爲設備安裝預構建數據庫的情況下,然後您希望 更改數據庫的版本(儘管我想不出什麼時候做 這是有道理的)。

感謝您的任何見解!

回答

3

如果您有不同語言的特定內容,並且您想按自定義順序執行,則可以使用setLocale()。 Android SDK允許您通過使用

select........ order by display_name COLLATE LOCALIZED ASC 

此處強調的是COLLATE LOCALIZED。這將命令帶有區域設置字母表的列。

+1

我得到了語言環境的工作原理。我只是不明白爲什麼我會在書籍和在線文章中看到討論在Android上使用SQLite數據庫的內容。這就像作者都在做相同的代碼樣本的剪切和粘貼,而不知道它的實際必要與否!據我所知,代碼是沒有必要的,只是想驗證。 – gdoten 2010-04-14 15:18:07

+0

假設你有一個數據庫持有重音文本,確保你需要正確的順序來獲得正確的結果,例如:'as,állat,dig,egg,éden,ivory,work'否則最終會得到那些重音的東西 – Pentium10 2010-04-14 18:49:13

+0

是的。但是新創建的數據庫已經有了locale集合,那麼爲什麼你會去打電話來將locale設置爲已經設置的?與鎖定和版本調用一樣 - 數據庫已經設置了這些,所以這些調用沒有意義。 – gdoten 2010-04-15 18:59:03