jdbc的簡單封裝(使用map處理結果集)
阿新 • • 發佈:2019-02-01
在上一片篇部落格中,我們在查詢的時候,是採用實現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("-----------------------");
}
}
結果如下: