zoukankan      html  css  js  c++  java
  • 使用DBUtils获取Blob类型数据

    DBUtils的三个核心类

    1. DBUtils

      • 介绍:连接数据库对象—-jdbc辅助方法的集合类,线程安全
      • 功能:控制连接,控制书屋,控制驱动加载额一个类。
      • 构造函数:
    DbUtils()
    1. QueryRunner
      • 介绍:使用插拔策略执行SQL查询,线程安全。
      • 构造函数:
    QueryRunner()
    QueryRunner(boolean pmdKnownBroken)
    QueryRunner(DataSource ds)
    QueryRunner(DataSource ds,boolean pmdKnownBroken)
    1. 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;
        }
    }
  • 相关阅读:
    YTU 2972: C语言习题5.24--文件操作1
    YTU 2925: 文件操作--文本文件读入
    YTU 2924: 文件操作--二进制文件读入
    PHP中$_SERVER[HTTP_REFERER]
    form控件中添加js代码,用javascript:某代码段(注意javascript之后用双引号)
    js中的location.href与location
    问题:下载页面代码? 以及php中header的用法。
    随笔
    __FILE__ $_SERVER['PHP_SELF'] $_SERVER['SCRIPT_NAME'] $_SERVER['SCRIPT_FILENAME'] 的区别
    #deebef 背景色
  • 原文地址:https://www.cnblogs.com/wpcnblog/p/12987305.html
Copyright © 2011-2022 走看看