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