我需要为我的应用程序创建一个SQLite DB。我需要以几种欧洲语言存储文本,因此会有大量的重音字符和其他奇怪的标记。我正在延长SQLiteOpenHelper
。
检查.db文件我注意到有一个名为android_metadata
的额外表。有一个名为locale
的列,默认情况下在我的模拟器中设置为“en_US”。
我已经阅读了开发人员指南中的SQLite部分,以及SQLiteOpenHelper
和SQLiteDatabase
的javadocs,在SO和Google中搜索过,但我无处可寻找到正确的位置将语言环境设置为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
?答案 0 :(得分:1)
LOCALIZED
归类算法时,才需要设置语言环境,这取决于系统区域设置,onConfigure()
上的setLocale()
。答案 1 :(得分:0)
好的,我在SQLiteOpenHelper
文档中找到了以下方法:
void onConfigure(SQLiteDatabase db)
从方法说明中复制:
在配置数据库连接时调用,以启用 诸如预写日志记录或外键支持等功能。这个 在onCreate(SQLiteDatabase)之前调用方法, onUpgrade(SQLiteDatabase,int,int),onDowngrade(SQLiteDatabase,int, 调用int)或onOpen(SQLiteDatabase)。它不应该修改 数据库除了根据需要配置数据库连接。这个 方法应该只调用配置参数的方法 数据库连接,例如enableWriteAheadLogging() setForeignKeyConstraintsEnabled(boolean),setLocale(Locale), setMaximumSize(long),或执行PRAGMA语句。
当帮助程序第一次创建数据库时,会调用此方法。我检查了db文件,android_metadata
现在包含正确的语言环境。我已经运行了一些测试来存储重音字符,即使没有设置正确的语言环境,它们也能正确写入数据库。