在我的代码中,我有一个预言机连接,我在其上执行以下命令:
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 = ',.';
更改","和"."顺序。