开发过程中 数据库使用oralce ,mybatis 在使用过程中一直很顺,今天发现一直可以使用的功能无法使用,定位到SQL ,将SQL 贴出到sqlplus 中执行一切正常,
查看报错信息
Caused by: java.lang.NullPointerException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:186)
at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:89)
at org.apache.ibatis.io.Resources.classForName(Resources.java:261)
at org.apache.ibatis.executor.resultset.ResultSetWrapper.resolveClass(ResultSetWrapper.java:121)
at org.apache.ibatis.executor.resultset.ResultSetWrapper.getTypeHandler(ResultSetWrapper.java:102)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyAutomaticMappings(DefaultResultSetHandler.java:433)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:344)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:298)
跟踪源码发现出问题的地方在 类 ResultSetWrapper 中
public ResultSetWrapper(ResultSet rs, Configuration configuration) throws SQLException {
super();
this.typeHandlerRegistry = configuration.getTypeHandlerRegistry();
this.resultSet = rs;
final ResultSetMetaData metaData = rs.getMetaData();
final int columnCount = metaData.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
columnNames.add(configuration.isUseColumnLabel() ? metaData.getColumnLabel(i) : metaData.getColumnName(i));
jdbcTypes.add(JdbcType.forCode(metaData.getColumnType(i)));
classNames.add(metaData.getColumnClassName(i));
}
}
因为oracle 的 BINARY_DOUBLE 无法转换到mybatis 的JDBCType 列表,oralce 这个类型兼容性还是太差,提供的ojdbc 驱动也存在问题,还是建议使用 number
Mybatis 查询结果 类型转换异常错误 ResultSetWrapper 转换类型错误 ,BINARY_DOUBLE