• 使用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;
        }
    }
  • 相关阅读:
    Neural Collaborative Filtering
    Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks
    Statistical Comparisons of Classifiers over Multiple Data Sets
    Data Poisoning Attacks on FactorizationBased Collaborative Filtering
    Markov Chain
    Adversarial Personalized Ranking for Recommendation
    常见网络协议
    Python3 JWT的生成与验证
    Python3函数中如何理解递归
    Python3使用re模块解析正则表达式
  • 原文地址:https://www.cnblogs.com/wpcnblog/p/12987305.html
Copyright © 2020-2023  润新知