1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package examples.array;
17
18 import java.sql.Array;
19 import java.sql.CallableStatement;
20 import java.sql.PreparedStatement;
21 import java.sql.ResultSet;
22 import java.sql.SQLException;
23 import java.util.Arrays;
24 import java.util.List;
25
26 import org.apache.ibatis.type.BaseTypeHandler;
27 import org.apache.ibatis.type.JdbcType;
28
29 public class StringArrayTypeHandler extends BaseTypeHandler<String[]> {
30 @Override
31 public void setNonNullParameter(PreparedStatement ps, int i, String[] parameter, JdbcType jdbcType) throws SQLException {
32 Array array = ps.getConnection().createArrayOf("VARCHAR", parameter);
33 ps.setArray(i, array);
34 array.free();
35 }
36
37 @Override
38 public String[] getNullableResult(ResultSet rs, String columnName) throws SQLException {
39 Array array = rs.getArray(columnName);
40 return extractArray(array);
41 }
42
43 @Override
44 public String[] getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
45 Array array = rs.getArray(columnIndex);
46 return extractArray(array);
47 }
48
49 @Override
50 public String[] getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
51 Array array = cs.getArray(columnIndex);
52 return extractArray(array);
53 }
54
55 private String[] extractArray(Array array) throws SQLException {
56 Object[] objArray = (Object[]) array.getArray();
57 array.free();
58
59 List<String> stringList = Arrays.stream(objArray)
60 .map(Object::toString)
61 .toList();
62
63 String[] stringArray = new String[stringList.size()];
64 return stringList.toArray(stringArray);
65 }
66 }