我需要为我的应用程序创建一个 SQLite 数据库。我需要存储几种欧洲语言的文本,所以会有很多重音字符和其他奇怪的标记。我在扩展SQLiteOpenHelper
。
检查 .db 文件时,我注意到有一个名为 .db 的额外表android_metadata
。有一个名为 的列locale
,在我的模拟器中默认设置为“en_US”。
我已经阅读了开发人员指南中的 SQLite 部分,以及在 SO 和 Google 中搜索的和的 javadocs SQLiteOpenHelper
,SQLiteDatabase
但我找不到将语言环境设置为 DB 的正确位置,或者它是否真的需要. 猜测应该在创建数据库时完成,我尝试调用db.setLocale
助手的onCreate
方法,但我得到了这个异常:
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
?