# 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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。