我有一个使用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#))
其他任何解决方案或解决方案都非常受欢迎。
由于
答案 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");