我需要爲我的應用程序創建一個SQLite數據庫。我需要以幾種歐洲語言存儲文本,所以會有很多重音字符和其他奇怪的標記。我正在延伸SQLiteOpenHelper
。爲什麼和在哪裏調用setLocale
檢查.db文件我注意到有一個額外的表名爲android_metadata
。有一個名爲locale
的列,在我的模擬器中默認設置爲「en_US」。
我在開發人員指南中搜索了SQLite部分,還搜索了在SO和Google中搜索到的SQLiteOpenHelper
和SQLiteDatabase
的javadoc,但無處可查找將語言環境設置爲數據庫的正確位置,或者如果它確實是必要的。猜測它應該在的DB創建完成,我試圖在助手的onCreate
方法調用db.setLocale
,但我,得到這個異常:
BEGIN TRANSACTION failed setting locale
FATAL EXCEPTION: Thread-9
android.database.sqlite.SQLiteException: cannot start a transaction within a transaction
at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method)
at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1950)
這是我的方法的樣子:
public class MyOpenHelper extends SQLiteOpenHelper {
@Override
public void onCreate(SQLiteDatabase db) {
db.setLocale(new Locale("en","EN"));
...
}
...
}
而且這裏是我的問題:
- 我真的需要將語言環境設置爲數據庫嗎?我並不需要從盒子中取出這些查詢,因爲我以後可以隨時對結果進行排序。
- 我應該在哪裏撥打
setLocale
?
謝謝。關於#1,哪個字符編碼是sqlite使用的?大多數情況下,大多數ISO-8859語言和默認(UTF-8?)排序不會有順序差異。 –
SQLite總是使用UTF-8。建議使用'UNICODE'排序規則,這使得數據庫獨立於語言環境。 –