JAVA jdbc封装 DbUtil 类 1.1-增加Record类封装列名和数据

说明

在 JAVA jdbc封装 DbUtil 类 1.0 中,query 查询方法返回 List<Object[]> ,只有值,没有列名,使用起来不方便

创建 Record 类,封装 列名、值,并提供方法便于取数据

Record

封装一行数据

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 封装一行数据
 * @author mym
 *
 */
public class Record {

    public List<String> columns;

    public Map<String,Object> datas;

    public Record(){
        columns=new ArrayList<>();
        datas=new HashMap<>();
    }
    public Record(int initNum){
        columns=new ArrayList<>(initNum);
        datas=new HashMap<>(initNum);
    }

    /**
     * 放数据
     * @param column
     * @param value
     */
    public void put(String column,Object value){
        columns.add(column);
        datas.put(column, value);
    }
    /**
     * 根据索引取出列名
     * @param index
     * @return
     */
    public String getColumn(int index){
        return columns.get(index);
    }
    /**
     * 根据索引取出值
     * @param index
     * @return
     */
    public Object getValue(int index){
        String column=columns.get(index);
        return datas.get(column);
    }
    /**
     * 根据列名取出值
     * @param column
     * @return
     */
    public Object getValue(String column){
        return datas.get(column);
    }
    /**
     * 返回所有列名
     * @return
     */
    public String[] getColumns() {
        String[] array=new String[columns.size()];
        return columns.toArray(array);
    }

    /**
     * 返回Map,key是column,value是值
     * @return
     */
    public Map<String, Object> toMap() {
        return datas;
    }

    /**
     * 返回所有的 数据
     * @return
     */
    public Object[] getValues(){
        int size=columns.size();
        Object[] array=new Object[size];

        for(int i=0;i<size;i++){
            String column=columns.get(i);
            array[i]=datas.get(column);
        }

        return array;
    }
    /**
     * 返回数据的数量
     * @return
     */
    public int getSize(){
        return columns.size();
    }

}

修改 query 方法

修改 JAVA jdbc封装 DbUtil 类 1.0 中的 query 查询方法

    /**
     * 查询
     * @param sql
     * @param objects
     * @throws SQLException
     */
    public List<Record> query(String sql, Object ... objects ) throws SQLException{
        PreparedStatement ps=conn.prepareStatement(sql);
        if(objects!=null && objects.length>0){
            for(int i=0;i<objects.length;i++){
                ps.setObject(i+1, objects[i]);
            }
        }
        ResultSet rs=ps.executeQuery();
        ResultSetMetaData metaData = rs.getMetaData();
        int columnNum=metaData.getColumnCount();
        List list=new ArrayList();
        while(rs.next()){
            Record record=new Record();
            for(int i=0   ; i<columnNum   ; i++  ){
                record.put(metaData.getColumnLabel(i+1), rs.getObject(i+1));
            }
            list.add(record);
        }
        rs.close();
        ps.close();
        return list;
    }

完整代码

DbUtils1_1类完整代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class DbUtils1_1 {
    protected Connection conn;

    /**
     * 查询
     * @param sql
     * @param objects
     * @throws SQLException
     */
    public List<Record> query(String sql, Object ... objects ) throws SQLException{
        PreparedStatement ps=conn.prepareStatement(sql);
        if(objects!=null && objects.length>0){
            for(int i=0;i<objects.length;i++){
                ps.setObject(i+1, objects[i]);
            }
        }
        ResultSet rs=ps.executeQuery();
        ResultSetMetaData metaData = rs.getMetaData();
        int columnNum=metaData.getColumnCount();

        List list=new ArrayList();
        while(rs.next()){

            Record record=new Record();
            for(int i=0   ; i<columnNum   ; i++  ){
                record.put(metaData.getColumnLabel(i+1), rs.getObject(i+1));
            }

            list.add(record);
        }
        rs.close();
        ps.close();
        return list;
    }

    /**
     * 增删改
     * @param sql
     * @param objects
     * @return
     * @throws SQLException
     */
    public int update(String sql,Object ... objects) throws SQLException{
        PreparedStatement ps=conn.prepareStatement(sql);
        if(objects!=null && objects.length>0){
            for(int i=0;i<objects.length;i++){
                ps.setObject(i+1, objects[i]);
            }
        }
        int i=ps.executeUpdate();
        ps.close();
        return i;
    }

    public void close() throws SQLException{
        if(conn!=null){
            conn.close();
        }
    }
    public void setConnection(Connection connection) {
        this.conn = connection;
    }
}
}

原文出处:/show_1IX2ylsjk3RS.html