From 983e664650b26bcba5d40c1cc4fa361052e9f89c Mon Sep 17 00:00:00 2001 From: mrsun002 <50945741+mrsun002@users.noreply.github.com> Date: Wed, 27 Oct 2021 23:01:32 +0800 Subject: [PATCH 1/3] Update CharacterTypeHandler.java first,this is a basic error, the condition statement miss the "" condition in if(...); in this case, i execute the select sql statement, and the resultType include a property -- Character type, when the DataBase return a "", Mybatis will throw a Exception: index out of range, becasue the array's length is 0 in the statement -- "return columnValue.charAt(0);" --- .../java/org/apache/ibatis/type/CharacterTypeHandler.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/apache/ibatis/type/CharacterTypeHandler.java b/src/main/java/org/apache/ibatis/type/CharacterTypeHandler.java index 102db2b669a..15fddd4aa68 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 != "") { 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 != "") { 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 != "") { return columnValue.charAt(0); } else { return null; From 4bd65080cbf85cc8ddcd8ddf184649d2fad8bf2c Mon Sep 17 00:00:00 2001 From: mrsun002 <50945741+mrsun002@users.noreply.github.com> Date: Fri, 10 Dec 2021 20:00:23 +0800 Subject: [PATCH 2/3] Update CharacterTypeHandler.java --- .../java/org/apache/ibatis/type/CharacterTypeHandler.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/apache/ibatis/type/CharacterTypeHandler.java b/src/main/java/org/apache/ibatis/type/CharacterTypeHandler.java index 15fddd4aa68..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 && columnValue != "") { + 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 && columnValue != "") { + 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 && columnValue != "") { + if (columnValue != null && !columnValue.isEmpty()) { return columnValue.charAt(0); } else { return null; From 71bc47eb14cc2a00d8bc71801a132299a8c1cb12 Mon Sep 17 00:00:00 2001 From: Iwao AVE! Date: Sat, 11 Dec 2021 01:35:35 +0900 Subject: [PATCH 3/3] Added tests for #2368 --- .../ibatis/type/CharacterTypeHandlerTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) 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(); + } }