Oracle Java:NLS_TERRITORY还不足以正确格式化一个数字吗?



在我的代码中,我有一个预言机连接,我在其上执行以下命令:

stmt.executeUpdate("ALTER SESSION SET NLS_TERRITORY='GREECE'"); 

现在,如果我从表中选择一个数字 - 假设它的值0,25

rs.getString(1)我得到的是'0.25'不像我期望的那样'0,25'......

我在这里错过了什么?
谢谢。

编辑 1.

下面的 SQL :

select 
value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS'

在我的会话中返回',.'这意味着对于预言机逗号用作小数分隔符。

这也证实了以下事实:当插入到表中时 - 逗号是预期的 - 否则会抛出异常。

所以问题仍然存在...为什么 getString 会这样?

查询中的值是一个NUMBER,它作为NUMBER传递给Java,并作为NUMBER存储在ResultSet中,然后使用rs.getString()将数字作为字符串获取

。Oracle与数据类型的转换无关,它都是Java内部的。

st = con.prepareStatement( "ALTER SESSION SET NLS_TERRITORY='GREECE'" );
st.executeUpdate();
st.close();
st = con.prepareStatement( "SELECT 1.23, TO_CHAR( 1.23 ) FROM DUAL" );
ResultSet rs = st.executeQuery();
ResultSetMetaData md = rs.getMetaData();
System.out.println( md.getColumnTypeName( 1 ) + " " + md.getColumnTypeName( 2 ) );
while( rs.next() )
{
System.out.println( rs.getString( 1 ) + " " + rs.getString( 2 ) );
}

输出:

NUMBER VARCHAR2
1.23 1,23

如果您希望 Oracle 格式化数字,请使用TO_CHAR格式化数字,以便将其作为字符串而不是数字传递给 Java。

这可能会对您有所帮助;

select value
from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS';
VALUE                                  
----------------------------------------
., 

检查此值。如果要使用","(0,25(更改参数,例如;

alter session set NLS_NUMERIC_CHARACTERS = ',.';

更改","和"."顺序。

最新更新