getObject(int columnIndex、Map<;String、Class<;?>;Map)为NUMBER返回的Java类型是什么

getObject(int columnIndex、Map<;String、Class<;?>;Map)为NUMBER返回的Java类型是什么,java,jdbc,Java,Jdbc,为什么在下面的o中是java.math.BigDecimal而不是String?这种方法的预期效果如何 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Map; public class Main { public static void main(String[] args)

为什么在下面的o中是
java.math.BigDecimal
而不是
String
?这种方法的预期效果如何

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Map;

public class Main {
   public static void main(String[] args) throws Exception {
     Connection conn =
DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/pdb1.us.oracle.com",
"restdev", "restdev");
     Map<String, Class<?>> typeMap = new java.util.HashMap<>();
     typeMap.put("NUMBER", String.class);

     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery("select 123 from dual");
     rs.next();
     Object o = rs.getObject(1, typeMap);

     System.out.println(o.getClass());
   }
}
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.ResultSet;
导入java.sql.Statement;
导入java.util.Map;
公共班机{
公共静态void main(字符串[]args)引发异常{
连接接头=
getConnection(“jdbc:oracle:thin:@localhost:1521/pdb1.us.oracle.com”,
“restdev”、“restdev”);

Map行为取决于您使用的驱动程序,但通常您只有一组有限的Java类型可以将结果具体化。如果您指定了任何其他类型,您可能会使用fallback默认类型或Exception

您可以在此处看到此映射的示例
更具体地说,对于Oracle JDBC驱动程序,驱动程序忽略了Yor map,因为您应该提供实现的类的名称。尽管在的文档中没有明确设置,但您可以在中看到它


阅读所有关于SQLData的内容,了解如何设置自己的自定义映射。

即使我将映射更改为
typeMap.put(“NUMBER”,java.lang.Integer.class)
输出仍然是
java.math.BigDecimal
我认为这对于JDBC驱动程序来说是更合适的链接。
NUMBER
的唯一有效类型是
BigDecimal
一些驱动程序不支持类型映射,其他驱动程序只支持非标准类型(即用户定义的类型),而不支持标准类型。