getObject(int columnIndex、Map<;String、Class<;?>;Map)为NUMBER返回的Java类型是什么
为什么在下面的o中是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)
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
一些驱动程序不支持类型映射,其他驱动程序只支持非标准类型(即用户定义的类型),而不支持标准类型。