在webapp中从java设置Oracle NLS_LANGUAGE

我对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()并且安全吗?

可以取决于您的架构。

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

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

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

请记住,更改区域的查询可能会影响索引使用和排序 。

如果你正在使用连接池,这是确保Johnny的结果在American中的最佳方式,而Johann的结果是德语。

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