DBUtils的三個核心類
DBUtils
- 介紹:連接數據庫對象—-jdbc輔助方法的集合類,線程安全
- 功能:控制連接,控制書屋,控制驅動加載額一個類。
- 構造函數:
DbUtils()
- QueryRunner
- 介紹:使用插拔策略執行SQL查詢,線程安全。
- 構造函數:
QueryRunner()
QueryRunner(boolean pmdKnownBroken)
QueryRunner(DataSource ds)
QueryRunner(DataSource ds,boolean pmdKnownBroken)
- ResultSetHandler
- 介紹:封裝數據的策略對象。將封裝結果集中的數據,轉換到另一個對象
- 方法:
handle(ResultSet rs)
ResultSetHandler實現類介紹
ArrayHandler :將ResultSet中第一行的數據轉化成對象數組
ArrayListHandler :將ResultSet中所有的數據轉化成List,List中存放的是Object[]
BeanHandler :將ResultSet中第一行的數據轉化成類對象
BeanListHandler :將ResultSet中所有的數據轉化成List,List中存放的是類對象
ColumnListHandler:將ResultSet中某一列的數據存成List,List中存放的是Object對象
KeyedHandler :將ResultSet中存成映射,key爲某一列對應爲Map。Map中存放的是數據
MapHandler :將ResultSet中第一行的數據存成Map映射
MapListHandler :將ResultSet中所有的數據存成List。List中存放的是Map
ScalarHandler :將ResultSet中一條記錄的其中某一列的數據存成Object
上述這些DBUtils提供的實現類,如果無法滿足需求,也可以自己實現。
重新實現ResultSetHandler
如果表字段中有Blob類型,直接用DBUtils提供的MapListHandler,讀出來的數據是亂碼,這個時候可以重寫MapListHandler。先判斷字段類型,如果是BLOB類型,則轉成String。如果還有其他複雜類型,也可以加入判斷,並轉化。
public class MapListHandler extends AbstractListHandler<Map<String, Object>>{
@Override
protected Map<String, Object> handleRow(ResultSet rs) throws SQLException {
// TODO Auto-generated method stub
Map<String, Object> result = new CaseInsensitiveMap();
ResultSetMetaData rsmd = rs.getMetaData();
int cols = rsmd.getColumnCount();
for (int i = 1; i <= cols; i++) {
//通過ResultSetMetaData類,可判斷該列數據類型
// System.out.println("columnName:"+rsmd.getColumnName(i)+"-----columnTypeName:"+rsmd.getColumnTypeName(i));
if(rsmd.getColumnTypeName(i).equals("BLOB")){
Blob bb = rs.getBlob(i);
if(bb!=null) {
byte[] b = bb.getBytes(1, (int)bb.length());
String blobStr = "";
try {
blobStr = new String(ZipUtil.deflateUncompress(b), "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//將結果放到Map中
result.put(rsmd.getColumnName(i), blobStr);
}
}else {
//如果不是BLOB類型,則直接放進Map
result.put(rsmd.getColumnName(i), rs.getObject(i));
}
}
return result;
}
}