package com.vci.server.query.refquery.utils; import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.sql.Clob; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.hibernate.SQLQuery; import org.hibernate.Session; import com.vci.server.base.persistence.dao.HibernateSessionFactory; public class RefQueryUtils { @SuppressWarnings("unchecked") public static Map executeQuery(String sql, String[] cnames) throws SQLException { Map datas = new HashMap(); Session session = HibernateSessionFactory.getSession(); SQLQuery query = session.createSQLQuery(sql); List rs = (List) query.list(); if(!rs.isEmpty()){ if(rs.iterator().hasNext()){ Object element = rs.iterator().next(); if (element instanceof String) { datas.put(cnames[0], element); return datas; } } String attrVal = ""; for (Object[] o : rs) { for (int i = 0; i < cnames.length; i++) { Object resltSet = datas.get(cnames[i]); List temp = null; if (resltSet instanceof List) { temp = (List) resltSet; } if(o[i] instanceof Clob){ attrVal = String.valueOf(o[i] == null ? "" : clobToString((Clob)o[i])); }else{ attrVal = String.valueOf(o[i] == null ? "" : o[i]); } if (temp == null) { List values = new ArrayList(); values.add(attrVal); datas.put(cnames[i], values); } else { temp.add(attrVal); } } } } return datas; } /** * clob转String * @param value * @return */ public static String clobToString(Clob value) { // TODO Auto-generated method stub String clobValue = ""; try { Reader is = value.getCharacterStream(); BufferedReader br = new BufferedReader(is); String s = br.readLine(); StringBuffer sb = new StringBuffer(); while(s!=null){ sb.append(s); s=br.readLine(); } clobValue = sb.toString(); } catch (SQLException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return clobValue; } }