有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Oracle Java:NLS_区域是否足以正确格式化数字?

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

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'

在我的会话内返回',.' 这意味着对于oracle,逗号用作十进制分隔符

当插入到表中时(应该是逗号),否则会引发异常,这一事实也证实了这一点

所以问题仍然是。。。为什么getString的行为是这样的


共 (2) 个答案

  1. # 1 楼答案

    这也许对你有帮助

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

    检查此值。如果要使用“,”(0,25)更改如下参数

    alter session set NLS_NUMERIC_CHARACTERS = ',.';
    

    更改“,”和“.”秩序

  2. # 2 楼答案

    查询中的值是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