NUMBER为getObject(int columnIndex,Map <string,class <?=“”>&gt; map)返回的Java类型是什么

时间:2017-04-21 08:38:36

标签: 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) 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());
   }
}

2 个答案:

答案 0 :(得分:0)

行为取决于您使用的驱动程序,但通常只有一组有限的Java类型可以实现。如果您指定其他任何内容,您可能会以回退默认类型或异常结束。

您可以看到此映射的示例,例如这里https://docs.oracle.com/cd/B28359_01/java.111/b31224/apxref.htm 更具体地说是Oracle JDBC驱动程序http://docs.oracle.com/cd/E11882_01/java.112/e16548/datacc.htm#JJDBC28403

答案 1 :(得分:0)

驱动程序忽略了Yor映射,因为您应该提供实现SQLData的类的名称。虽然未在getObject(int,Map)的文档中明确设置,但您可以在getObject(int,Class)中看到它。

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