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。
在我的代码中,我有一个 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。