使用getObject方法从ResultSet对象检索列时,JDBC驱动程序将选择该类.我正在寻找一种方法来选择在运行时检索列的类.在下面的示例中,使用变量T作为整数创建类型Class1.Class Class1T{public T getColumn(DataSourc...
![](https://oss.womengda.net/imgfile/2310/1ER05C523160-332T.jpg)
使用getObject方法从ResultSet对象检索列时,JDBC驱动程序将选择该类.我正在寻找一种方法来选择在运行时检索列的类.
在下面的示例中,使用变量T作为整数创建类型Class1.
Class Class1<T>
{
public T getColumn(DataSource ds)
{
T value = null;
Connection con = null;
try
{
con = ds.getConnection();
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select 1 from dual");
rs.next();
Object o = rs.getObject(1); // I want an Integer but a BigDecimal is created!
value = (T) o; // ClassCastException here!
rs.close();
st.close();
}
finally
{
if (con != null) { con.close(); }
}
return i;
}
}
ResultSet类提供了一个名为getObject的方法,该方法接受列参数和类型Map参数.此类型Map仅用于UDT(用户定义的类型).我还需要将此功能应用于基本SQL类型.我知道我可以使用switch / case语句实现这个解决方案,但我试图避免这种情况.这可能吗?
编辑
我应该提到我在Java 1.6上.看起来这可能已经在1.7中解决了.感谢JB Nizet的参考.
解决方法:
您可能必须编写自己的代码.您可能必须执行所收到数据的转换.为了避免切换/大小写,你可以使用像Hibernate这样的精确ORM工具,这将允许你的Pojo具有类似于表列的精确名称,并且它们会自动使用列中的数据填充Pojo.在此之后,您可以为每列编写数据转换代码.像Hibernate这样的ORM工具,MyBatis会为你做映射.
本文标题为:是否可以将基本JDBC SQL类型映射到Java类?
![](/xwassets/images/pre.png)
![](/xwassets/images/next.png)
- 详解RocketMQ中的消费者启动与消费流程分析 2023-02-28
- SpringBoot数据层处理方案精讲 2023-06-17
- 一文带你了解SpringBoot中常用注解的原理和使用 2023-07-01
- SpringBoot自定义bean绑定实现 2023-06-17
- 手写java性能测试框架第二版 2023-03-15
- jsp从数据库获取数据填充下拉框实现二级联动菜单的方法 2023-08-03
- Java检查日期字符串是否合法的方法总结 2023-06-06
- Java中如何快速构建项目脚手架的实现 2022-11-29
- feign 打印日志不显示的问题及解决 2023-02-05
- jdk动态代理使用实例详解 2023-01-18