为什么以下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());
}
}
答案 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的所有内容,了解如何设置自己的自定义映射。