舒畅 发表于 2018-9-26 08:28:30

java 程序调用Oracle Function

  程序代码——调用Function通用方法:
  


[*]package com.boxun.crm.util;
[*]
[*]import java.sql.CallableStatement;
[*]
[*]import java.sql.ResultSet;
[*]import java.sql.ResultSetMetaData;
[*]import java.sql.SQLException;
[*]import java.sql.Statement;
[*]import java.util.ArrayList;
[*]import java.util.HashMap;
[*]import java.util.List;
[*]import java.util.Map;
[*]import org.hibernate.HibernateException;
[*]import org.hibernate.Query;
[*]import org.hibernate.Session;
[*]import org.hibernate.SessionFactory;
[*]import org.hibernate.Transaction;
[*]import org.hibernate.cfg.Configuration;
[*]
[*]public class DAOUtil {
[*]
[*]    private static DAOUtil instance = null;
[*]    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
[*]    private static final ThreadLocal threadLocal = new ThreadLocal();
[*]    private static final Configuration cfg = new Configuration();
[*]    private static SessionFactory sessionFactory = null;
[*]
[*]
[*]    public synchronized static DAOUtil getInstance()
[*]    {
[*]      if (instance == null) {
[*]            instance = new DAOUtil();
[*]            try {
[*]                cfg.configure(CONFIG_FILE_LOCATION);
[*]                sessionFactory = cfg.buildSessionFactory();
[*]            } catch (HibernateException e) {
[*]                e.printStackTrace();
[*]            }
[*]      }
[*]      return instance;
[*]    }
[*]
[*]    public Session getSession() {
[*]      Session session = (Session) threadLocal.get();
[*]      try {
[*]            if ((session == null) || (!session.isOpen())) {
[*]                session = sessionFactory.openSession();
[*]                threadLocal.set(session);
[*]            }
[*]      } catch (HibernateException e) {
[*]            e.printStackTrace();
[*]      }
[*]      return session;
[*]    }
[*]
[*]    public void closeSession() {
[*]      Session session = (Session) threadLocal.get();
[*]      threadLocal.set(null);
[*]      if ((session != null) && (session.isOpen())) {
[*]            session.flush();
[*]            session.close();
[*]      }
[*]    }
[*]
[*]    private String getSqlStr(String fname, int size) {
[*]      StringBuffer sql = new StringBuffer();
[*]      //String call="{? call pro(?,?,?)}";
[*]      sql.append("{ ? = call ");
[*]      sql.append(fname);
[*]      sql.append("(");
[*]      for (int i = 0; i < size; i++) {
[*]            sql.append(&quot;?&quot;);
[*]            if (i < size - 1) {
[*]                sql.append(&quot;,&quot;);
[*]            }
[*]      }
[*]      sql.append(&quot;) }&quot;);
[*]
[*]      return sql.toString();
[*]    }
[*]
[*]    private String formatSqlStr(String sql, ArrayList params) {
[*]      if ((params == null) || (params.size() == 0))
[*]            return sql;
[*]      for (int i = 0; i < params.size(); i++) {
[*]            sql = sql.replaceFirst(&quot;//?&quot;, String.valueOf(params.get(i)));
[*]      }
[*]      return sql;
[*]    }
[*]
[*]    @SuppressWarnings(&quot;deprecation&quot;)
[*]    public int executeByFun(Session session, String fname, List params)
[*]            throws HibernateException, SQLException {
[*]      String sql = getSqlStr(fname, params.size());
[*]      int rval = -100;
[*]      try {
[*]            if (session.isConnected()) {
[*]                CallableStatement call = session.connection().prepareCall(sql);
[*]                call.registerOutParameter(1, 4);
[*]                int i = 0;
[*]                for (int j = 2; i < params.size(); j++) {
[*]                  call.setObject(j, params.get(i));
[*]                  i++;
[*]                }
[*]
[*]                if (!call.execute()) {
[*]                  rval = call.getInt(1);
[*]                }
[*]                call.close();
[*]            }
[*]      } catch (Exception ex) {
[*]            ex.printStackTrace();
[*]      }
[*]      return rval;
[*]    }
[*]
[*]    public int executeByFun(String fname, List params)
[*]            throws HibernateException, SQLException {
[*]      String sql = getSqlStr(fname, params.size());
[*]      int rval = -100;
[*]      try {
[*]            Session session = DAOUtil.getInstance().getSession();
[*]            if (session.isConnected()) {
[*]                CallableStatement call = session.connection().prepareCall(sql);
[*]                call.registerOutParameter(1, 4);
[*]                int i = 0;
[*]                for (int j = 2; i < params.size(); j++) {
[*]                  call.setObject(j, params.get(i));
[*]                  i++;
[*]                }
[*]
[*]                if (!call.execute()) {
[*]                  rval = call.getInt(1);
[*]                }
[*]                call.close();
[*]            }
[*]      } finally {
[*]            closeSession();
[*]      }
[*]      return rval;
[*]    }
[*]
[*]    public double executeByFunDouble(String fname, ArrayList params)
[*]            throws HibernateException, SQLException {
[*]      String sql = getSqlStr(fname, params.size());
[*]      double rval = -100.0D;
[*]      try {
[*]            Session session = DAOUtil.getInstance().getSession();
[*]            if (session.isConnected()) {
[*]                CallableStatement call = session.connection().prepareCall(sql);
[*]                call.registerOutParameter(1, 8);
[*]                int i = 0;
[*]                for (int j = 2; i < params.size(); j++) {
[*]                  call.setObject(j, params.get(i));
[*]
[*]                  i++;
[*]                }
[*]
[*]                if (!call.execute()) {
[*]                  rval = call.getDouble(1);
[*]                }
[*]                call.close();
[*]            }
[*]      } finally {
[*]            closeSession();
[*]      }
[*]      return rval;
[*]    }
[*]
[*]    public int executeBySql(String sql, ArrayList params)
[*]            throws HibernateException, SQLException {
[*]      Transaction tran = null;
[*]      try {
[*]            Session session = DAOUtil.getInstance().getSession();
[*]            if (session.isConnected()) {
[*]                Query query = session.createSQLQuery(sql);
[*]                for (int i = 0; i < params.size(); i++)
[*]                  query.setParameter(i, params.get(i));
[*]                tran = session.beginTransaction();
[*]                int rval = query.executeUpdate();
[*]                tran.commit();
[*]                return rval > 0 ? 0 : -100;
[*]            }
[*]      } finally {
[*]            closeSession();
[*]      }
[*]      return -100;
[*]    }
[*]
[*]    public double executeBySqlDouble(String sql, ArrayList params)
[*]            throws HibernateException, SQLException {
[*]      Transaction tran = null;
[*]      double rval = 0.0D;
[*]      List list = null;
[*]      try {
[*]            Session session = DAOUtil.getInstance().getSession();
[*]            if (session.isConnected()) {
[*]                Query query = session.createSQLQuery(sql);
[*]                for (int i = 0; i < params.size(); i++)
[*]                  query.setParameter(i, params.get(i));
[*]                tran = session.beginTransaction();
[*]                list = query.list();
[*]                if (list != null && list.size() > 0) {
[*]                  rval = Double.parseDouble(list.get(0)==null ? 0.0 + &quot;&quot;
[*]                            : list.get(0) + &quot;&quot;);
[*]                }
[*]                tran.commit();
[*]            }
[*]      } finally {
[*]            closeSession();
[*]      }
[*]      return rval;
[*]    }
[*]
[*]    public List getResultByFun(String fname, ArrayList params)
[*]            throws HibernateException, SQLException {
[*]      String sql = getSqlStr(fname, params.size());
[*]      List result = null;
[*]      try {
[*]            Session session = DAOUtil.getInstance().getSession();
[*]            if (session.isConnected()) {
[*]                System.out.println(session.connection().prepareCall(sql));
[*]                CallableStatement call = session.connection().prepareCall(sql);
[*]                call.registerOutParameter(1, -10);
[*]
[*]                for (int i = 0, j = 2; i < params.size(); j++) {
[*]                  call.setObject(j, params.get(i));
[*]
[*]                  i++;
[*]                }
[*]
[*]                if (!call.execute()) {
[*]                  ResultSet rs = (ResultSet) call.getObject(1);
[*]                  ResultSetMetaData rsmd = rs.getMetaData();
[*]                  String[] colname = new String;
[*]                  for (int j = 1, i = 0; i < colname.length; j++) {
[*]                        colname = rsmd.getColumnName(j);
[*]                        i++;
[*]                  }
[*]                  result = new ArrayList();
[*]                  while (rs.next()) {
[*]                        Map row = new HashMap();
[*]                        for (int i = 0; i < colname.length; i++)
[*]                            row.put(colname, rs.getObject(colname));
[*]                        result.add(row);
[*]                  }
[*]                  rs.close();
[*]                }
[*]                call.close();
[*]            }
[*]      } finally {
[*]            closeSession();
[*]      }
[*]
[*]      return result;
[*]    }
[*]
[*]    public String getResultByFunString(String fname, ArrayList params)
[*]            throws HibernateException, SQLException {
[*]      String sql = getSqlStr(fname, params.size());
[*]      String str = &quot;&quot;;
[*]      try {
[*]            Session session = DAOUtil.getInstance().getSession();
[*]            if (session.isConnected()) {
[*]                CallableStatement call = session.connection().prepareCall(sql);
[*]                call.registerOutParameter(1, 12);
[*]
[*]                for (int i = 0, j = 2; i < params.size(); j++) {
[*]                  call.setObject(j, params.get(i));
[*]                  i++;
[*]                }
[*]                if (!call.execute()) {
[*]                  str = String.valueOf(call.getObject(1));
[*]                }
[*]                call.close();
[*]            }
[*]      } finally {
[*]            closeSession();
[*]      }
[*]
[*]      return str;
[*]    }
[*]
[*]    public List getResultBySql(String sql, ArrayList params)
[*]            throws HibernateException, SQLException {
[*]      List result = null;
[*]      sql = formatSqlStr(sql, params);
[*]      try {
[*]            Session session = DAOUtil.getInstance().getSession();
[*]            if (session.isConnected()) {
[*]                Statement stat = session.connection().createStatement();
[*]                ResultSet rs = stat.executeQuery(sql);
[*]                ResultSetMetaData rsmd = rs.getMetaData();
[*]                String[] colname = new String;
[*]                for (int j = 1, i = 0; i < colname.length; j++) {
[*]                  colname = rsmd.getColumnName(j);
[*]                  i++;
[*]                }
[*]
[*]                result = new ArrayList();
[*]                while (rs.next()) {
[*]                  Map row = new HashMap();
[*]                  for (int i = 0; i < colname.length; i++)
[*]                        row.put(colname, rs.getObject(colname));
[*]                  result.add(row);
[*]                }
[*]                rs.close();
[*]                stat.close();
[*]            }
[*]      } finally {
[*]            closeSession();
[*]      }
[*]      return result;
[*]    }
[*]}
  

  应用程序调用Function:
  


[*]/**添加参数**/
[*]ArrayList params = new ArrayList();
[*]if((null !=wer_1 && &quot;&quot;!=wer_1)&&(null !=wer_2 && &quot;&quot;!=wer_2))
[*]{
[*]    /**
[*]   * 古道西风
[*]   * 2011-05-23
[*]   */
[*]    params.add(tbmeetmgr.getStoptime()); //会议开会日期
[*]    params.add(tbmeetmgr.getStarttime()); //会议开始时间
[*]    params.add(tbmeetmgr.getEndtime());//会议结束时间
[*]    params.add(ecId);//集团编号
[*]    if(tbmeetmgr.getXunhuairiqi() == null){
[*]      params.add(0); //循环日期
[*]    }else{
[*]      params.add(tbmeetmgr.getXunhuairiqi()); //循环日期
[*]    }
[*]    if(tbmeetmgr.getXunhuaimoshi() == null){
[*]      params.add(0); //循环模式
[*]    }else{
[*]      params.add(tbmeetmgr.getXunhuaimoshi()); //循环模式
[*]    }
[*]    params.add(tbmeetmgr.getHuiyimoshi()); //会议模式
[*]}
[*]
[*]//List list_Sel_RoomInfo=daoSql.find(sql, params); //原程序代码
[*]
[*]List list_Sel_RoomInfo = new ArrayList();;
[*]try {
[*]    list_Sel_RoomInfo = com.boxun.crm.util.DAOUtil.getInstance().getResultByFun
[*]            (&quot;FUN_tbmeetmgrInfo.pro_sel_tbmeetmgrinfo&quot;, params);
[*]} catch (HibernateException e) {
[*]    e.printStackTrace();
[*]} catch (SQLException e) {
[*]    e.printStackTrace();
[*]}
[*]if(null !=list_Sel_RoomInfo && list_Sel_RoomInfo.size()>0)
[*]{
[*]    list_room_info=new ArrayList();
[*]    for(int i=0;i
页: [1]
查看完整版本: java 程序调用Oracle Function