我对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
我的问题:
答案 0 :(得分:1)
如果你正在使用连接池,这是确保Johnny的结果在美国并且Johann的结果是德语的最好方法。
假设您存储登录/用户信息,您可以使用V $ NLS_VALID_VALUES作为数据源存储用户首选的LANGUAGE,TERRITORY,CHARACTERSET和SORT的NLS值。
答案 1 :(得分:1)
可以取决于您的架构。
有些地方选择在单个数据库中使用多个地理位置的本地网络应用程序(例如,一个在法国,一个在英国,一个在西班牙)。
或者您从数据库中以“计算机”格式提取数据(例如日期,数字),并让网络应用程序将其转换为最终用户的首选项(如果您没有用户登录,则可能基于浏览器信息)。
或者您为不同的“地区”设置了单独的连接池。
请注意,更改地区的查询可能会影响index usage and sorting。