dbUtils SQL 查询和行处理器(不写javaBean行处理器)

dbUtils SQL 查询和行处理器(不写javaBean行处理器)

只介绍处理一行情况,使用行处理器解决(不需要介绍多行,因为可以通过行处理器解决)

行处理器的大致运行流程(通用,12顺序可以变)

  1. 得到表的元数据(用于获取总列数和列名)
  2. 创建负责用于接收数据的对象
  3. 接收数据转换成合适的格式并返回

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);
}