共享clob字段读取方式

    xiaoxiao2021-03-25  125

    访问数据库,其实是很简单的事情,但是对访问有clob字段的,那么就不那么简单了。如果不利用框架的话,使用原生的jdbc来进行数据库访问,那么,clob字段的读取就不能跟普通的字段同时读取了。下面分享一个个人封装的一个clob字段读取的小工具:

    import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Date; import org.apache.log4j.chainsaw.Main; import oracle.sql.CLOB; /** *类描述:clob字段工具 *@author: 魏霖涛 *@date: 日期:2017-3-8 时间:下午4:09:55 *@version 1.0 */ public class ClobUtil { /** * clob字段读取 * @param sql 取clob字段的sql,如:select task_dependence_desc from ADT_SOFTLIST_CFG where TASK_IDENTIFY=? * @param params 预编译,问号?的替代参数数组,如:["111"]参数数组 * @param target task_dependence_desc 要取出的目标clod字段的名称 如:task_dependence_desc * @return */ public String clobExport(String sql,Object[] params,String target){ Database db = null;//这边是获取数据源,请用自己的方式获取数据源,实例化 CLOB clob = null; Connection conn = null; PreparedStatement stmt = null; String content = ""; try{ conn = db.getDataSource().getConnection(); stmt = conn.prepareStatement(sql); //参数预编译 String methodName = ""; Object obj; //采取反射方式进行参数的预编译仅支持int String Date类型 for(int i=0,l=params.length;i<l;i++){ obj = params[i]; if(obj.getClass().getSimpleName().equals("Integer")){ methodName = "setInt"; }else{ methodName = "set"+obj.getClass().getSimpleName(); } //反射赋值 Method action = stmt.getClass().getMethod(methodName, new Class[]{int.class,obj.getClass()}); action.invoke(stmt, new Object[]{i+1,obj}); } ResultSet rs = stmt.executeQuery(); if (rs.next()) { clob = (oracle.sql.CLOB) rs.getClob(target); // 获得CLOB字段str // 注释: 用 rs.getString("str")无法得到 数据 ,返回的 是 NULL; if(clob != null) content = ClobToString(clob); } }catch (Exception e) { e.printStackTrace(); }finally{ try{ if(stmt!=null) stmt.close(); if(conn!=null) conn.close(); }catch (Exception e) { e.printStackTrace(); } } return content; } /** * desc 将字CLOB转成STRING类型 * @param clob * @throws SQLException * @throws IOException */ public String ClobToString(CLOB clob) throws SQLException, IOException { String reString = ""; Reader is = clob.getCharacterStream();// 得到流 BufferedReader br = new BufferedReader(is); String s = br.readLine(); StringBuffer sb = new StringBuffer(); while (s != null) {// 执行循环将字符串全部取出付值给StringBuffer由StringBuffer转成STRING sb.append(s); s = br.readLine(); } reString = sb.toString(); return reString; } } 利用上面的小工具中的 clobExport(String sql,Object[] params,String target)方法,可以很轻易的玩弄clob字段了。

    转载请注明原文地址: https://ju.6miu.com/read-7022.html

    最新回复(0)