ibatis和db之间的不同小数分隔符

时间:2013-12-16 10:41:08

标签: java sql-server oracle locale ibatis

我有一个使用ibatis的Web spring应用程序。此应用程序可以安装在不同的服务器和不同的DB中。当我设置服务器时出现问题,例如,用英语(DOT作为小数分隔符)和DB用意大利语(COMMA作为小数分隔符)。因此小数分隔符是不同的。我有一个转换,取决于我在每种情况下使用的DB,在iBatis中没什么大不了的。 where条件的一些例子是(其他DB可能是那些的一部分):

Oracle:DECIMAL_COLUMN = TO_NUMBER(REPLACE(#STRING_VALUE#, '.', ','))

SQLServer:DECIMAL_COLUMN = REPLACE(#STRING_VALUE#, '.', ',')

对于那个例子,我得到了一个" ORA-01722:无效的号码"。我的问题是:有没有办法在iBatis中为每种类型的DB获取小数分隔符?所以我可以将其替换为:

DECIMAL_COLUMN = TO_NUMBER(REPLACE(#STRING_VALUE#, #SERVER_SIDE_DECIMAL_SEPARATOR#, #DATABASE_DECIMAL_SEPARATOR#))

其他任何解决方案或解决方案都非常受欢迎。

由于

1 个答案:

答案 0 :(得分:0)

虽然没有将他的评论列为可能的答案,但我认为这是一个很好的解决方案。这里有一点代码

在Oracle案例中,将会话更改为,..,

alter session set NLS_NUMERIC_CHARACTERS=',.';

取决于服务器的区域设置。只需使用DecimalFormatSymbols来获取这些值:

String decimalSeparator = String.valueOf(new DecimalFormatSymbols().getDecimalSeparator());

String groupingSeparator = String.valueOf(new DecimalFormatSymbols().getGroupingSeparator());

在SQL Server中,将会话语言设置为与服务器端相同:

SET LANGUAGE the_language;

使用Locale获取语言:

String language = Locale.getDefault().getDisplayLanguage("en_US");