【发布时间】:2012-12-05 19:02:16
【问题描述】:
我需要为我的应用程序创建一个 SQLite 数据库。我需要存储几种欧洲语言的文本,所以会有很多重音字符和其他奇怪的标记。我正在扩展SQLiteOpenHelper。
检查 .db 文件时,我注意到有一个名为 android_metadata 的额外表。有一个名为locale 的列,在我的模拟器中默认设置为“en_US”。
我已经阅读了开发人员指南中的 SQLite 部分,以及 SQLiteOpenHelper 和 SQLiteDatabase 的 javadocs,在 SO 和 Google 中进行了搜索,但我无法找到将语言环境设置为的正确位置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?
【问题讨论】:
标签: java android sqlite locale