diff --git a/src/main/java/org/apache/ibatis/type/CharacterTypeHandler.java b/src/main/java/org/apache/ibatis/type/CharacterTypeHandler.java index 102db2b669a..50229c2cf78 100644 --- a/src/main/java/org/apache/ibatis/type/CharacterTypeHandler.java +++ b/src/main/java/org/apache/ibatis/type/CharacterTypeHandler.java @@ -33,7 +33,7 @@ public void setNonNullParameter(PreparedStatement ps, int i, Character parameter @Override public Character getNullableResult(ResultSet rs, String columnName) throws SQLException { String columnValue = rs.getString(columnName); - if (columnValue != null) { + if (columnValue != null && !columnValue.isEmpty()) { return columnValue.charAt(0); } else { return null; @@ -43,7 +43,7 @@ public Character getNullableResult(ResultSet rs, String columnName) throws SQLEx @Override public Character getNullableResult(ResultSet rs, int columnIndex) throws SQLException { String columnValue = rs.getString(columnIndex); - if (columnValue != null) { + if (columnValue != null && !columnValue.isEmpty()) { return columnValue.charAt(0); } else { return null; @@ -53,7 +53,7 @@ public Character getNullableResult(ResultSet rs, int columnIndex) throws SQLExce @Override public Character getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { String columnValue = cs.getString(columnIndex); - if (columnValue != null) { + if (columnValue != null && !columnValue.isEmpty()) { return columnValue.charAt(0); } else { return null; diff --git a/src/test/java/org/apache/ibatis/type/CharacterTypeHandlerTest.java b/src/test/java/org/apache/ibatis/type/CharacterTypeHandlerTest.java index 924ed489e8a..363f02bda8c 100644 --- a/src/test/java/org/apache/ibatis/type/CharacterTypeHandlerTest.java +++ b/src/test/java/org/apache/ibatis/type/CharacterTypeHandlerTest.java @@ -88,4 +88,24 @@ public void shouldGetResultNullFromCallableStatement() throws Exception { verify(cs, never()).wasNull(); } + @Test + void testEmptyStringGetStringByName() throws Exception { + when(rs.getString("column")).thenReturn(""); + assertNull(TYPE_HANDLER.getResult(rs, "column")); + verify(rs, never()).wasNull(); + } + + @Test + void testEmptyStringGetStringByIndex() throws Exception { + when(rs.getString(1)).thenReturn(""); + assertNull(TYPE_HANDLER.getResult(rs, 1)); + verify(rs, never()).wasNull(); + } + + @Test + void testEmptyStringCallableStatementGetStringByIndex() throws Exception { + when(cs.getString(1)).thenReturn(""); + assertNull(TYPE_HANDLER.getResult(cs, 1)); + verify(cs, never()).wasNull(); + } }