我需要强制结果列的精度和比例,对货币值进行自定义格式化(我假设每个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;
答案 0 :(得分: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??
引自this链接 -
<强>
getPrecision
强>
public int getPrecision(int column)
throws SQLException
获取指定列的小数位数。
参数:列 - 第一列为1, 第二个是2,......
返回:精确度
引发:SQLException - 如果是 发生数据库访问错误