Oracle Java:NLS_TERRITORY 是否足以正确格式化数字?

Oracle Java : Isn't NLS_TERRITORY enough to correctly format a number?

在我的代码中,我有一个 oracle 连接,我在该连接上执行以下操作:

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

现在,如果我 select 我的 table 中的一个数字 - 假设它的值为 0,25

rs.getString(1) 我得到的是 '0.25' 而不是我预期的 '0,25'...

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

编辑 1.

下面的sql:

select 
    value
        from nls_session_parameters
        where parameter = 'NLS_NUMERIC_CHARACTERS'

在我的会话中 returns ',.' 这意味着对于 oracle 逗号用作小数点分隔符。

当插入 table 时,逗号是必需的,否则会抛出异常。

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

这也许对你有帮助;

    select value
    from nls_session_parameters
    where parameter = 'NLS_NUMERIC_CHARACTERS';

VALUE                                  
----------------------------------------
., 

检查这个值。如果您想使用 ',' (0,25) 更改参数,例如 ;

alter session set NLS_NUMERIC_CHARACTERS = ',.';

更改“,”和“。”订单。

您查询中的值是 NUMBER,它作为 NUMBER 传递给 Java,并作为 NUMBER 存储在结果集中,那么您是使用 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。