使用DBUtils获取Blob类型数据

来源:互联网 发布:江国香织 知乎 编辑:程序博客网 时间:2024/06/06 07:27

DBUtils的三个核心类

  1. DBUtils

    • 介绍:连接数据库对象—-jdbc辅助方法的集合类,线程安全
    • 功能:控制连接,控制书屋,控制驱动加载额一个类。
    • 构造函数:
DbUtils()
  1. QueryRunner
    • 介绍:使用插拔策略执行SQL查询,线程安全。
    • 构造函数:
QueryRunner()QueryRunner(boolean pmdKnownBroken)QueryRunner(DataSource ds)QueryRunner(DataSource ds,boolean pmdKnownBroken)
  1. ResultSetHandler
    • 介绍:封装数据的策略对象。将封装结果集中的数据,转换到另一个对象
    • 方法:
handleResultSet rs)

ResultSetHandler实现类介绍

ArrayHandler     :将ResultSet中第一行的数据转化成对象数组ArrayListHandler :将ResultSet中所有的数据转化成ListList中存放的是Object[]BeanHandler      :将ResultSet中第一行的数据转化成类对象BeanListHandler  :将ResultSet中所有的数据转化成ListList中存放的是类对象ColumnListHandler:将ResultSet中某一列的数据存成ListList中存放的是Object对象KeyedHandler     :将ResultSet中存成映射,key为某一列对应为MapMap中存放的是数据MapHandler       :将ResultSet中第一行的数据存成Map映射MapListHandler   :将ResultSet中所有的数据存成ListList中存放的是MapScalarHandler    :将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;    }}
原创粉丝点击