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