1

我需要强制结果列的精度和比例,对货币值进行自定义格式化(我假设每个 NUMBER(*,2) 都是货币值)。考虑以下查询:

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

如有必要,它会进行预期的舍入,但结果元数据描述了一个具有未指定精度和比例的 Number 字段:

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;
4

1 回答 1

1

这不应该是

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

等等。

你的代码

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

从此链接引用-

getPrecision

public int getPrecision(int column)
                  throws SQLException 

获取指定列的小数位数。

参数column - 第一列为 1,第二列为 2,...

返回:精度

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

于 2012-10-29T18:28:33.927 回答