2012-10-29 120 views
1

我需要强制结果列的精度和规模,对货币值做自定义格式(我假设每个NUMBER(*,2)是一个货币值)。 考虑下面的查询:如何指定Oracle数字的精度/比例JDBC元数据?

select cast(1234.56 as NUMBER(6,2)) from dual; 

它确实预期必要时四舍五入,但结果的元数据描述了非指定的精度和小数数字​​字段:

System.out.println(rs.getMetaData().getScale(1)); // prints 0; 

我相信一些奇怪的在发生JDBC的一面,如预期,因为下面的脚本并返回一个NUMBER(6,2):

drop table temp; 
create table temp as (
select cast(1234.56 as NUMBER(6,2)) x from dual 
); 
select * from temp; 

回答

1

不应该这个是

System.out.println(rs.getMetaData().getScale(1)); //For the first column 
System.out.println(rs.getMetaData().getScale(2)); //For the second column 

等等。从this

您的代码

System.out.println(rs.getMetaData().getScale(0)); //0th Column?? 

报价链路

getPrecision

public int getPrecision(int column) 
        throws SQLException 

获取指定列的小数位数。

参数 - 第一列是1, 第二是2,......

返回:精密

抛出:SQLException - 如果一个 数据库访问错误发生

+0

是的,谢谢。我纠正了它。 – GFonte

相关问题