通常來講,咱們使用框架進行關係型數據庫與對象類型的轉換時沒有過多注意。那麼在使用jdbc轉換對象時有一些對象可能會被忽略,例如CLOB字段,下面是我在使用JDBC轉義CLOB時的處理。java
public static List<Map<String,Object>> getDetail(final String instance,final String sql) throws Exception{ String key=""; Connection con=null; Statement st=null; ResultSet rs=null; ResultSetMetaData rsmd=null; List<Map<String,Object>> resultList =new ArrayList<Map<String,Object>>(); Map<String,String> jdbcMap=new HashMap<String,String>(); //取得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<String, Object> map = null; while (rs.next()) { map = new HashMap<String, Object>(); 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 ""; } }