资讯专栏INFORMATION COLUMN

JDBC处理包含CLOB字段

shuibo / 1894人阅读

摘要:一般来说,我们使用框架进行关系型数据库与对象类型的转换时没有过多注意。那么在使用转换对象时有一些对象可能会被忽略,例如字段,下面是我在使用转义时的处理。类型处理主要方法

一般来说,我们使用框架进行关系型数据库与对象类型的转换时没有过多注意。那么在使用jdbc转换对象时有一些对象可能会被忽略,例如CLOB字段,下面是我在使用JDBC转义CLOB时的处理。

public static List> getDetail(final String instance,final String sql) throws Exception{
 
    String key="";
    Connection con=null;
    Statement st=null;
    ResultSet rs=null;
    ResultSetMetaData rsmd=null;
    List> resultList =new ArrayList>();
     
    Map jdbcMap=new HashMap();

     
//取得jdbc连接串,此处省略掉,大家可以直接写上jdbc配置

    //jdbcMap=praseXml(instance);
 
    try {
        Class.forName(jdbcMap.get("driver"));
      //这里是由于配置的一个jdbc配置文件加密了,需要解密 ,大家可以按自己的方式写
       con=DriverManager.getConnection(jdbcMap.get("url"),DesEncryptUtils.decrypt(jdbcMap.get("name")),DesEncryptUtils.decrypt(jdbcMap.get("pass")));
        st = con.createStatement();
        rs = st.executeQuery(sql);
        rsmd=rs.getMetaData();
        logger.info("...Running...");
        int columnCount = rsmd.getColumnCount();
        Map map = null;
         
        while (rs.next()) {
            map = new HashMap();
            for (int i = 1; i <= columnCount; i++) {
                key = rsmd.getColumnName(i);
                //这里就是我们主要的处理CLOB方法了。
                if( rs.getObject(key) instanceof Clob){
                    Clob clob = rs.getClob(key);// java.sql.Clob类型 
                    String clobValue=getClobString(clob);
                    map.put(key,clobValue);
                }else{
                    Object value = rs.getObject(key);
                    map.put(key, value);
                }
            }
            resultList.add(map);
        }
         
    }finally{
    con.close();
        st.close();
        rs.close();
    }
 
    return resultList;
}
//处理CLOB主要方法   
public static String getClobString(Clob c) {
        try {
            Reader reader = c.getCharacterStream();
            if (reader == null) {
                return null;
            }
            StringBuffer sb = new StringBuffer();
            char[] charbuf = new char[4096];
            for (int i = reader.read(charbuf); i > 0; i = reader.read(charbuf)) {
                sb.append(charbuf, 0, i);
            }
            return new String(sb.toString().getBytes("UTF-8"));
        } catch (Exception e) {
            return "";
        }
    }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/35007.html

相关文章

  • JDBC处理包含CLOB字段

    摘要:一般来说,我们使用框架进行关系型数据库与对象类型的转换时没有过多注意。那么在使用转换对象时有一些对象可能会被忽略,例如字段,下面是我在使用转义时的处理。类型处理主要方法 一般来说,我们使用框架进行关系型数据库与对象类型的转换时没有过多注意。那么在使用jdbc转换对象时有一些对象可能会被忽略,例如CLOB字段,下面是我在使用JDBC转义CLOB时的处理。 public static Li...

    buildupchao 评论0 收藏0
  • Java知识点总结(JDBC-大文本对象的使用)

    摘要:知识点总结大文本对象的使用知识点总结用于存储大量的文本数据大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理。最大长度为字符的列。 Java知识点总结(JDBC-大文本对象的使用) @(Java知识点总结)[Java, JDBC] CLOB(Chaaracter Large Object) 用于存储大量的文本数据 大字段有些特殊,不同数据库处理的方式不一样...

    aboutU 评论0 收藏0
  • JDBC【PreparedStatment、批处理处理二进制、自动主键、调用存储过程、函数】

    摘要:可对进行预编译,提高效率,预编译的存储在对象中防止注入。获取到自动主键列的值调用数据库的存储过程调用存储过程的语法调用函数的语法如果是类型的,那么在调用的时候是要注册的。 1.PreparedStatement对象 PreparedStatement对象继承Statement对象,它比Statement对象更强大,使用起来更简单 Statement对象编译SQL语句时,如果SQL语句...

    YFan 评论0 收藏0
  • Spark Java使用DataFrame的foreach/foreachPartition

    摘要:已更新至,归管了,因此也相应统一。本文不再适用及以上版本。字段类型会非常非常奇葩。。。。但是如果体积过于庞大,很容易导致特别是我们一般不会给配置过高的内存。第二个,是函数的返回值。对于而言,我们可以直接使用,来得到这个什么都没有的东西。 Spark已更新至2.x,DataFrame归DataSet管了,因此API也相应统一。本文不再适用2.0.0及以上版本。 DataFrame原生支...

    Jrain 评论0 收藏0
  • FineReport连接Oracle数据库的问题汇总

    摘要:实现步骤若使用数据库,在定义数据连接时,将原来的改成数据库名如在和机器上都拥有数据库名为,那么数据连接的就改成,即可。或者,因网络问题或数据库没有启动导致连接失败。和的区别程序连接数据库时,用驱动要比用驱动性能好些。 一、Oracle连接多个数据库 通常情况,在定义数据连接时只连一个Oracle数据库,但是有时可能因为网络或者其它原因,数据库连接不上或不能工作了,则整个项目就不能运行了...

    kevin 评论0 收藏0

发表评论

0条评论

shuibo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<