只介绍处理一行情况,使用行处理器解决(不需要介绍多行,因为可以通过行处理器解决)
行处理器的大致运行流程(通用,12顺序可以变)
- 得到表的元数据(用于获取总列数和列名)
- 创建负责用于接收数据的对象
- 接收数据转换成合适的格式并返回
Object[]行处理器
public static Object[] taArray(ResultSet resultSet) throws SQLException {
// 先得到表的总列数(通过元数据获取)
int count = resultSet.getMetaData().getColumnCount();
// 创建Object[]数组,数组的长度为列的总数
Object[] objects = new Object[count];
for (int i = 0; i < count; i++) {
objects[i] = resultSet.getObject(i + 1);
}
return objects;
}
Map行处理器
public static Map<String, Object> toMap(ResultSet resultSet) throws SQLException {
// 先得到表的元数据
ResultSetMetaData metaData = resultSet.getMetaData();
Map<String, Object> map = new HashMap<>();
for (int i = 1; i <= metaData.getColumnCount(); i++) {
map.put(metaData.getColumnLabel(i), resultSet.getObject(i));
}
return map;
}
Column行处理器
由于handler
方法只能传入结果集,但是需要columnIndex
判断获取的下标,所以需要构造函数传入columnIndex
Column处理器
public class ColumnHandler<T> implements ResultSetHandler<T> {
private int columnIndex;
public ColumnHandler(int columnIndex) {
this.columnIndex = columnIndex;
}
@Override
public T handler(ResultSet resultSet) throws SQLException {
return resultSet.next() ? (T) RowProcessor.toColumn(resultSet, columnIndex) : null;
}
}
行处理器
public static Object toColumn(ResultSet resultSet, int columnIndex) throws SQLException {
return resultSet.getObject(columnIndex);
}