1. 程式人生 > >jdbc的簡單封裝(使用map處理結果集)

jdbc的簡單封裝(使用map處理結果集)

上一片篇部落格中,我們在查詢的時候,是採用實現IResultSetHandler這個類的handle方法來處理查詢返回的資料的,但是這樣做有一個缺點,查詢不同的表,每次都要實現這個handle方法,增大了工作量,而且用起來也差強人意,所以這次使用map物件來處理返回的資料:

工具類的程式碼如下:

package JDBCUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import
java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class JDBCFunction_Map { //DDL操作 public static List<Map<String,Object>>getSimpleObjs(String sql,Object...params){ Connection conn = null; ResultSet rs = null
; PreparedStatement ps = null; List<Map<String,Object>> mapList = new ArrayList<Map<String,Object>>(); try { conn = JDBCUtils.getConnection(); ps = conn.prepareStatement(sql); if(params != null){ for(int
i = 0 ; i < params.length ; i++){ ps.setObject(i+1, params[i]); } } rs = ps.executeQuery(); //精髓的地方就在這裡,類ResultSet有getMetaData()會返回資料的列和對應的值的資訊,然後我們將列名和對應的值作為map的鍵值存入map物件之中... ResultSetMetaData rsmd = rs.getMetaData(); while(rs.next()){ Map<String,Object> map = new HashMap<String,Object>(); for(int i = 0 ; i < rsmd.getColumnCount() ; i++){ String col_name = rsmd.getColumnName(i+1); Object col_value = rs.getObject(col_name); if(col_value == null){ col_value = ""; } map.put(col_name, col_value); } mapList.add(map); } return mapList; } catch (SQLException e) { e.printStackTrace(); return null; }finally{ JDBCUtils.close(conn, ps, rs); } } }

下面進行簡單的查詢測試:
程式碼如下:

public static void main(String[] args) {
        String sql = "SELECT * FROM USER ";
        List<Map<String , Object>> userList = JDBCFunction_Map.getSimpleObjs(sql);
        for(int i = 0 ; i < userList.size() ; i++){
            System.out.println("user"+(i+1));
            Map<String ,Object> usermap = userList.get(i);
            for(String key : usermap.keySet()){
                System.out.println("key:"+key+"  value:"+usermap.get(key));
            }
            System.out.println("-----------------------");
        }
    }

結果如下:
結果