在webapp中从java设置Oracle NLS_LANGUAGE

时间:2010-09-13 16:07:32

标签: java oracle internationalization

我对JDBC的理解是它根据JVM的默认Locale自动设置Oracle NLS_LANGUAGE / NLS_TERRITORY会话参数。这对于独立的swing应用程序来说很方便,但对于java webapp似乎毫无用处。我能想到的唯一解决方案是在实际进行数据库查询之前专门设置会话参数,类似于:

Connection c = // However you get it.
Statement s = c.createStatement();
s.execute("alter session set NLS_LANGUAGE = 'SPANISH'");
// Do actual query here

我的问题:

  1. 这是从webapp设置Oracle语言/国家/地区参数的最佳方式吗?
  2. 由于Oracle参数采用语言名称而不是代码,是否存在从java / ISO语言代码到Oracle语言名称的映射?例如,我可以使用Locale.getDisplayLanguage()并且安全吗?

2 个答案:

答案 0 :(得分:1)

如果你正在使用连接池,这是确保Johnny的结果在美国并且Johann的结果是德语的最好方法。

假设您存储登录/用户信息,您可以使用V $ NLS_VALID_VALUES作为数据源存储用户首选的LANGUAGE,TERRITORY,CHARACTERSET和SORT的NLS值。

答案 1 :(得分:1)

可以取决于您的架构。

有些地方选择在单个数据库中使用多个地理位置的本地网络应用程序(例如,一个在法国,一个在英国,一个在西班牙)。

或者您从数据库中以“计算机”格式提取数据(例如日期,数字),并让网络应用程序将其转换为最终用户的首选项(如果您没有用户登录,则可能基于浏览器信息)。

或者您为不同的“地区”设置了单独的连接池。

请注意,更改地区的查询可能会影响index usage and sorting