【问题标题】:Android SQLite database locale, locking, and versionAndroid SQLite 数据库区域设置、锁定和版本
【发布时间】:2010-04-01 17:51:17
【问题描述】:

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

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

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

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

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

感谢您的任何见解!

【问题讨论】:

    标签: database android sqlite


    【解决方案1】:

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

    select........ order by display_name COLLATE LOCALIZED ASC
    

    这里的重点是COLLATE LOCALIZED。这将使用区域设置字母对列进行排序。

    【讨论】:

    • 我知道语言环境是如何工作的。我只是不明白为什么我一直在讨论在 Android 上使用 SQLite 数据库的书籍和在线文章中看到这些行。就像作者都在对示例代码进行相同的剪切和粘贴,却不知道它是否真的有必要!据我所知,代码不是必需的,只是想验证一下。
    • 假设您有一个包含重音文本的数据库,确保您需要正确的顺序才能获得正确的结果,例如:as,állat,dig,egg,éden,ivory,work 否则您最终会得到那些重音的东西
    • 是的。但是一个新创建的数据库已经设置了区域设置,那么您为什么要调用将区域设置设置为已经设置的位置呢?与锁定和版本调用相同——数据库已经设置了这些,所以没有必要进行这些调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    相关资源
    最近更新 更多