database - Android SQLite 数据库语言环境、锁定和版本

标签 database android sqlite

在一些书籍和网上,我看到这些方法调用是在 数据库已创建:

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

为什么要这样做?据我所知,在创建新数据库后, 系统添加了一个名为 android_metadata 的表,其中有一个字段名为 locale 并且该表有一行的 locale 字段设置为 “en_US”。现在我假设该列具有该值,因为我使用的是 美国电话,如果我使用的是其他地区的电话 locale 字段将被适本地设置。谁能证实这一点? 我猜测 setLocale 方法只会在 如果你在手机上安装了一个预建的数据库然后想要 更改语言环境以匹配手机的语言环境。听起来不错吧?

setLockingEnabled 的文档说它默认为 true 所以 没有必要打那个电话,对吧?

最后,调用 setVersion 有什么用?我找不到一张 table 包含此信息,所以我一直假设数据库文件 本身将版本号存储在某处。所以当我创建一个 数据库,这需要你已经指定版本 在对 SQLiteOpenHelper 构造函数的调用中,没有 指向调用 setVersion。同样,也许这种方法存在于 将预建数据库安装到设备的情况,然后您希望 更改数据库的版本(虽然我想不起来 这是有道理的)。

感谢任何见解!

最佳答案

当您有不同语言的某些内容并且您想要进行自定义排序时,您可以使用 setLocale()。 Android SDK 允许您使用

调用订单
select........ order by display_name COLLATE LOCALIZED ASC

这里的重点是COLLATE LOCALIZED。这将使用语言环境字母表对列进行排序。

关于database - Android SQLite 数据库语言环境、锁定和版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2562435/

相关文章:

mysql - WordPress数据库ID号很长,现在我可以将其改回4或5位数字ID吗?

数据库或用户级锁

android - 当应用程序处于前台时检测 Android 7.0 Nougat 上的连接变化

c# - Sqlite "Update"C#语法错误

mysql - 多个表使用多个联结表引用一个表

mysql - 使用连接和子查询的具有多个搜索参数的 SQL Select

android - Holo.Light 给出 "Resource not public"错误

android - 使用-sdk :minSdkVersion 16 cannot be smaller than version 19 declared in library [:react-native-hms-site]

python - 使用 "case"时获取空行(实际上是使用聚合时)

apache-flex - Flex:在多个插入调用中使用sqlite last_insert_rowid