2010-04-01 66 views
6

在一些书和网上我看到的是创建 数据库之后,这些方法调用正在取得:Android的SQLite数据库语言环境,锁定和版本

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

这是为什么呢?据我所知,在创建新数据库后,系统添加一个名为android_metadata的表,其中一个字段名为 区域设置,该表有一行,区域设置字段设置为 “en_US”。现在我假设该列具有该值,因为我使用的是美国电话 ,如果我使用的是来自不同地区的电话,则 区域设置字段将被适当设置。任何人都可以确认吗? 我猜测setLocale方法只会在 的情况下有用,您可以在电话上安装预建数据库,然后想要 更改区域设置以匹配电话的区域设置。听起来对吗?

setLockingEnabled的文档说它默认为true,所以 没有必要进行该调用,对吧?

最后,setVersion的调用是什么?我无法找到 包含此信息的表格,因此我一直假定数据库文件 本身在某处存储版本号。因此,当我创建一个 数据库时,需要您在调用SQLiteOpenHelper构造函数时已指定版本号 ,则调用setVersion时没有 点。再说一次,也许这种方法存在于为设备安装预构建数据库的情况下,然后您希望 更改数据库的版本(尽管我想不出什么时候做 这是有道理的)。

感谢您的任何见解!

回答

3

如果您有不同语言的特定内容,并且您想按自定义顺序执行,则可以使用setLocale()。 Android SDK允许您通过使用

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

此处强调的是COLLATE LOCALIZED。这将命令带有区域设置字母表的列。

+1

我得到了语言环境的工作原理。我只是不明白为什么我会在书籍和在线文章中看到讨论在Android上使用SQLite数据库的内容。这就像作者都在做相同的代码样本的剪切和粘贴,而不知道它的实际必要与否!据我所知,代码是没有必要的,只是想验证。 – gdoten 2010-04-14 15:18:07

+0

假设你有一个数据库持有重音文本,确保你需要正确的顺序来获得正确的结果,例如:'as,állat,dig,egg,éden,ivory,work'否则最终会得到那些重音的东西 – Pentium10 2010-04-14 18:49:13

+0

是的。但是新创建的数据库已经有了locale集合,那么为什么你会去打电话来将locale设置为已经设置的?与锁定和版本调用一样 - 数据库已经设置了这些,所以这些调用没有意义。 – gdoten 2010-04-15 18:59:03