Java ResultSetMetaData返回的是BigDecimal而不是int
需要一些关于jdbc元数据的帮助。 我正在使用ResultsetMetaData获取Oracle10g上表列的元数据。我正在使用ojdbc14.jar。表ID中有一个字段声明为数字。jdbc在运行时读取此字段以获取其元数据属性ResultSetMetaData.getColumnClassName()正在返回java.math.BigDecimal,而我希望它是整型、整型、长型或长型。 我甚至尝试用显式定义ID列为的int类型的语句创建表Java ResultSetMetaData返回的是BigDecimal而不是int,java,jdbc,Java,Jdbc,需要一些关于jdbc元数据的帮助。 我正在使用ResultsetMetaData获取Oracle10g上表列的元数据。我正在使用ojdbc14.jar。表ID中有一个字段声明为数字。jdbc在运行时读取此字段以获取其元数据属性ResultSetMetaData.getColumnClassName()正在返回java.math.BigDecimal,而我希望它是整型、整型、长型或长型。 我甚至尝试用显式定义ID列为的int类型的语句创建表 CREATE TABLE COST_DETAILS (
CREATE TABLE COST_DETAILS ( ID **INT** Primary Key...
但ResultSetMetaData仍返回ID列的BigDecimal
有没有办法创建具有任何特定列类型的表,以便重新运行int/long类型
或者是ResultsetMetaData总是为Oracle返回BigDecimal。否。这取决于驱动程序 您可以选择以下内容:
if( class == "BigDecimal" ) {
return "Integer"
} else if ( ....
并返回整数而不是bigdecimal。大多数人都是这样做的 我认为Oracle数字总是映射到BigDecimal,因为Oracle不将它们存储为二进制int,所以这是一个精确的映射。您可以在一个辅助方法中使浮点数成为二进制,该辅助方法用于确定哪个java类型属于哪个sql类型apache utils库中实际上有一个类可以执行类似的操作,但我找不到它。类似这样的内容:getJavaType(rsmd.getType(column));//或者类似的