ResultSetMetaData返回BigDecimal而不是int

4

需要关于jdbc元数据的帮助。 我正在使用ResultsetMetaData来获取Oracle10g表中列的元数据。我正在使用ojdbc14.jar。表中有一个字段ID被声明为Number类型。在运行时,使用jdbc读取此字段以获取其元数据属性。ResultSetMetaData.getColumnClassName()返回java.math.BigDecimal,而我期望它是Integer或int或long或Long类型。 我甚至尝试使用statement创建具有显式定义ID列int类型的表。

CREATE TABLE COST_DETAILS ( ID **INT** Primary Key...

但是ResultSetMetaData仍然为ID列返回BigDecimal。

有没有一种方法可以创建具有特定列类型的表,以便它将返回int/long类型?

还是ResultsetMetaData总是为Oracle返回BigDecimal?

2个回答

6
我认为 Oracle 数字将始终映射到 BigDecimal,因为 Oracle 不会将它们存储为二进制整数,因此这是一种精确的映射。请参阅 Oracle 数据类型Oracle JDBC。您可以使浮点数以二进制形式出现。

-1

不是的。这取决于驱动程序。

你可以有类似于:

if( class == "BigDecimal" ) {
    return "Integer" 
} else if ( .... 

返回整数而不是BigDecimal。这是大多数人所做的。


在用于确定哪种Java类型属于哪种SQL类型的辅助方法中,实际上有一个Apache Utils库中的类可以做到这样的事情,但我找不到它。大概是这样:getJavaType(rsmd.getType(column)); //或者类似这样的东西。 - OscarRyz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接