Java 程序调用Oracle Function


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

  1. package com.boxun.crm.util;   
  2.   
  3. import java.sql.CallableStatement;   
  4.   
  5. import java.sql.ResultSet;   
  6. import java.sql.ResultSetMetaData;   
  7. import java.sql.SQLException;   
  8. import java.sql.Statement;   
  9. import java.util.ArrayList;   
  10. import java.util.HashMap;   
  11. import java.util.List;   
  12. import java.util.Map;   
  13. import org.hibernate.HibernateException;   
  14. import org.hibernate.Query;   
  15. import org.hibernate.Session;   
  16. import org.hibernate.SessionFactory;   
  17. import org.hibernate.Transaction;   
  18. import org.hibernate.cfg.Configuration;   
  19.   
  20. public class DAOUtil {   
  21.        
  22.     private static DAOUtil instance = null;   
  23.     private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";   
  24.     private static final ThreadLocal threadLocal = new ThreadLocal();   
  25.     private static final Configuration cfg = new Configuration();   
  26.     private static SessionFactory sessionFactory = null;   
  27.        
  28.        
  29.     public synchronized static DAOUtil getInstance()   
  30.     {   
  31.         if (instance == null) {   
  32.             instance = new DAOUtil();   
  33.             try {   
  34.                 cfg.configure(CONFIG_FILE_LOCATION);   
  35.                 sessionFactory = cfg.buildSessionFactory();   
  36.             } catch (HibernateException e) {   
  37.                 e.printStackTrace();   
  38.             }   
  39.         }   
  40.         return instance;           
  41.     }   
  42.        
  43.     public Session getSession() {   
  44.         Session session = (Session) threadLocal.get();   
  45.         try {   
  46.             if ((session == null) || (!session.isOpen())) {   
  47.                 session = sessionFactory.openSession();   
  48.                 threadLocal.set(session);   
  49.             }   
  50.         } catch (HibernateException e) {   
  51.             e.printStackTrace();   
  52.         }   
  53.         return session;   
  54.     }   
  55.   
  56.     public void closeSession() {   
  57.         Session session = (Session) threadLocal.get();   
  58.         threadLocal.set(null);   
  59.         if ((session != null) && (session.isOpen())) {   
  60.             session.flush();   
  61.             session.close();   
  62.         }   
  63.     }   
  64.   
  65.     private String getSqlStr(String fname, int size) {   
  66.         StringBuffer sql = new StringBuffer();   
  67.         //String call="{? call pro(?,?,?)}";   
  68.         sql.append("{ ? = call ");   
  69.         sql.append(fname);   
  70.         sql.append("(");   
  71.         for (int i = 0; i < size; i++) {   
  72.             sql.append("?");   
  73.             if (i < size - 1) {   
  74.                 sql.append(",");   
  75.             }   
  76.         }   
  77.         sql.append(") }");   
  78.   
  79.         return sql.toString();   
  80.     }   
  81.   
  82.     private String formatSqlStr(String sql, ArrayList params) {   
  83.         if ((params == null) || (params.size() == 0))   
  84.             return sql;   
  85.         for (int i = 0; i < params.size(); i++) {   
  86.             sql = sql.replaceFirst("\\?", String.valueOf(params.get(i)));   
  87.         }   
  88.         return sql;   
  89.     }   
  90.        
  91.     @SuppressWarnings("deprecation")   
  92.     public int executeByFun(Session session, String fname, List params)   
  93.             throws HibernateException, SQLException {   
  94.         String sql = getSqlStr(fname, params.size());   
  95.         int rval = -100;   
  96.         try {   
  97.             if (session.isConnected()) {   
  98.                 CallableStatement call = session.connection().prepareCall(sql);   
  99.                 call.registerOutParameter(14);   
  100.                 int i = 0;   
  101.                 for (int j = 2; i < params.size(); j++) {   
  102.                     call.setObject(j, params.get(i));   
  103.                     i++;   
  104.                 }   
  105.   
  106.                 if (!call.execute()) {   
  107.                     rval = call.getInt(1);   
  108.                 }   
  109.                 call.close();   
  110.             }   
  111.         } catch (Exception ex) {   
  112.             ex.printStackTrace();   
  113.         }   
  114.         return rval;   
  115.     }   
  116.        
  117.     public int executeByFun(String fname, List params)   
  118.             throws HibernateException, SQLException {   
  119.         String sql = getSqlStr(fname, params.size());   
  120.         int rval = -100;   
  121.         try {   
  122.             Session session = DAOUtil.getInstance().getSession();   
  123.             if (session.isConnected()) {   
  124.                 CallableStatement call = session.connection().prepareCall(sql);   
  125.                 call.registerOutParameter(14);   
  126.                 int i = 0;   
  127.                 for (int j = 2; i < params.size(); j++) {   
  128.                     call.setObject(j, params.get(i));   
  129.                     i++;   
  130.                 }   
  131.   
  132.                 if (!call.execute()) {   
  133.                     rval = call.getInt(1);   
  134.                 }   
  135.                 call.close();   
  136.             }   
  137.         } finally {   
  138.             closeSession();   
  139.         }   
  140.         return rval;   
  141.     }   
  142.   
  143.     public double executeByFunDouble(String fname, ArrayList params)   
  144.             throws HibernateException, SQLException {   
  145.         String sql = getSqlStr(fname, params.size());   
  146.         double rval = -100.0D;   
  147.         try {   
  148.             Session session = DAOUtil.getInstance().getSession();   
  149.             if (session.isConnected()) {   
  150.                 CallableStatement call = session.connection().prepareCall(sql);   
  151.                 call.registerOutParameter(18);   
  152.                 int i = 0;   
  153.                 for (int j = 2; i < params.size(); j++) {   
  154.                     call.setObject(j, params.get(i));   
  155.   
  156.                     i++;   
  157.                 }   
  158.   
  159.                 if (!call.execute()) {   
  160.                     rval = call.getDouble(1);   
  161.                 }   
  162.                 call.close();   
  163.             }   
  164.         } finally {   
  165.             closeSession();   
  166.         }   
  167.         return rval;   
  168.     }   
  169.   
  170.     public int executeBySql(String sql, ArrayList params)   
  171.             throws HibernateException, SQLException {   
  172.         Transaction tran = null;   
  173.         try {   
  174.             Session session = DAOUtil.getInstance().getSession();   
  175.             if (session.isConnected()) {   
  176.                 Query query = session.createSQLQuery(sql);   
  177.                 for (int i = 0; i < params.size(); i++)   
  178.                     query.setParameter(i, params.get(i));   
  179.                 tran = session.beginTransaction();   
  180.                 int rval = query.executeUpdate();   
  181.                 tran.commit();   
  182.                 return rval > 0 ? 0 : -100;   
  183.             }   
  184.         } finally {   
  185.             closeSession();   
  186.         }   
  187.         return -100;   
  188.     }   
  189.   
  190.     public double executeBySqlDouble(String sql, ArrayList params)   
  191.             throws HibernateException, SQLException {   
  192.         Transaction tran = null;   
  193.         double rval = 0.0D;   
  194.         List list = null;   
  195.         try {   
  196.             Session session = DAOUtil.getInstance().getSession();   
  197.             if (session.isConnected()) {   
  198.                 Query query = session.createSQLQuery(sql);   
  199.                 for (int i = 0; i < params.size(); i++)   
  200.                     query.setParameter(i, params.get(i));   
  201.                 tran = session.beginTransaction();   
  202.                 list = query.list();   
  203.                 if (list != null && list.size() > 0) {   
  204.                     rval = Double.parseDouble(list.get(0)==null ? 0.0 + ""  
  205.                             : list.get(0) + "");   
  206.                 }   
  207.                 tran.commit();   
  208.             }   
  209.         } finally {   
  210.             closeSession();   
  211.         }   
  212.         return rval;   
  213.     }   
  214.   
  215.     public List getResultByFun(String fname, ArrayList params)   
  216.             throws HibernateException, SQLException {   
  217.         String sql = getSqlStr(fname, params.size());   
  218.         List result = null;   
  219.         try {   
  220.             Session session = DAOUtil.getInstance().getSession();   
  221.             if (session.isConnected()) {   
  222.                 System.out.println(session.connection().prepareCall(sql));   
  223.                 CallableStatement call = session.connection().prepareCall(sql);   
  224.                 call.registerOutParameter(1, -10);   
  225.   
  226.                 for (int i = 0, j = 2; i < params.size(); j++) {   
  227.                     call.setObject(j, params.get(i));   
  228.   
  229.                     i++;   
  230.                 }   
  231.   
  232.                 if (!call.execute()) {   
  233.                     ResultSet rs = (ResultSet) call.getObject(1);   
  234.                     ResultSetMetaData rsmd = rs.getMetaData();   
  235.                     String[] colname = new String[rsmd.getColumnCount()];   
  236.                     for (int j = 1, i = 0; i < colname.length; j++) {   
  237.                         colname[i] = rsmd.getColumnName(j);   
  238.                         i++;   
  239.                     }   
  240.                     result = new ArrayList();   
  241.                     while (rs.next()) {   
  242.                         Map row = new HashMap();   
  243.                         for (int i = 0; i < colname.length; i++)   
  244.                             row.put(colname[i], rs.getObject(colname[i]));   
  245.                         result.add(row);   
  246.                     }   
  247.                     rs.close();   
  248.                 }   
  249.                 call.close();   
  250.             }   
  251.         } finally {   
  252.             closeSession();   
  253.         }   
  254.   
  255.         return result;   
  256.     }   
  257.   
  258.     public String getResultByFunString(String fname, ArrayList params)   
  259.             throws HibernateException, SQLException {   
  260.         String sql = getSqlStr(fname, params.size());   
  261.         String str = "";   
  262.         try {   
  263.             Session session = DAOUtil.getInstance().getSession();   
  264.             if (session.isConnected()) {   
  265.                 CallableStatement call = session.connection().prepareCall(sql);   
  266.                 call.registerOutParameter(112);   
  267.   
  268.                 for (int i = 0, j = 2; i < params.size(); j++) {   
  269.                     call.setObject(j, params.get(i));   
  270.                     i++;   
  271.                 }   
  272.                 if (!call.execute()) {   
  273.                     str = String.valueOf(call.getObject(1));   
  274.                 }   
  275.                 call.close();   
  276.             }   
  277.         } finally {   
  278.             closeSession();   
  279.         }   
  280.   
  281.         return str;   
  282.     }   
  283.   
  284.     public List getResultBySql(String sql, ArrayList params)   
  285.             throws HibernateException, SQLException {   
  286.         List result = null;   
  287.         sql = formatSqlStr(sql, params);   
  288.         try {   
  289.             Session session = DAOUtil.getInstance().getSession();   
  290.             if (session.isConnected()) {   
  291.                 Statement stat = session.connection().createStatement();   
  292.                 ResultSet rs = stat.executeQuery(sql);   
  293.                 ResultSetMetaData rsmd = rs.getMetaData();   
  294.                 String[] colname = new String[rsmd.getColumnCount()];   
  295.                 for (int j = 1, i = 0; i < colname.length; j++) {   
  296.                     colname[i] = rsmd.getColumnName(j);   
  297.                     i++;   
  298.                 }   
  299.   
  300.                 result = new ArrayList();   
  301.                 while (rs.next()) {   
  302.                     Map row = new HashMap();   
  303.                     for (int i = 0; i < colname.length; i++)   
  304.                         row.put(colname[i], rs.getObject(colname[i]));   
  305.                     result.add(row);   
  306.                 }   
  307.                 rs.close();   
  308.                 stat.close();   
  309.             }   
  310.         } finally {   
  311.             closeSession();   
  312.         }   
  313.         return result;   
  314.     }   
  315. }  
  • 1
  • 2
  • 下一页

相关内容