您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Mybatis查询时报错 java.sql.SQLException: Invalid value for getInt() 如何解决
## 问题现象
在使用MyBatis进行数据库查询时,可能会遇到以下异常:
```java
java.sql.SQLException: Invalid value for getInt()
该错误通常发生在尝试将数据库字段值转换为Java的int
类型时,但实际字段值为NULL
或非数字类型。
数据库字段值为NULL
MyBatis通过ResultSet.getInt()
获取值时,如果数据库字段为NULL,JDBC会抛出此异常
类型不匹配
数据库字段类型为字符串(如VARCHAR)但包含非数字内容(如”abc”),而Java实体类中使用int类型接收
MyBatis映射配置问题
resultMap
中字段类型与数据库实际类型不匹配
// 将基本类型int改为包装类型Integer
private Integer age;
包装类型可以接收NULL值,避免NPE问题。
在MyBatis映射文件中明确指定jdbcType:
<result column="age" property="age" jdbcType="INTEGER"/>
SELECT COALESCE(age, 0) AS age FROM users
-- 或Oracle
SELECT NVL(age, 0) AS age FROM users
创建处理NULL值的自定义类型处理器:
public class NullIntTypeHandler extends BaseTypeHandler<Integer> {
@Override
public void setNonNullParameter(...) {...}
@Override
public Integer getNullableResult(ResultSet rs, String columnName)
throws SQLException {
return rs.wasNull() ? null : rs.getInt(columnName);
}
}
@Column(nullable = false)
注解明确字段不可为空
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
该异常的根本原因是Java基本类型与数据库NULL值的不兼容。推荐优先使用包装类型Integer,既能保持类型安全,又能正确处理NULL值。通过合理的类型设计和MyBatis配置,可以有效避免此类问题。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。