在Hibernate中使用SQL語句

001 	package cn.chn.chen.query.service.impl;
002 	 
003 	import java.sql.Connection;
004 	import java.sql.PreparedStatement;
005 	import java.sql.ResultSet;
006 	import java.sql.ResultSetMetaData;
007 	import java.sql.SQLException;
008 	import java.sql.Statement;
009 	import java.util.ArrayList;
010 	import java.util.List;
011 	 
012 	import org.hibernate.HibernateException;
013 	import org.hibernate.Session;
014 	import org.springframework.orm.hibernate3.HibernateCallback;
015 	import org.springframework.orm.hibernate3.SessionFactoryUtils;
016 	import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
017 	 
018 	/**
019 	 * <p>
020 	 * 在Hibernate中使用SQL.
021 	 * </p>
022 	 * <p>
023 	 * 建立時間 Dec 22, 2010 - 5:43:27 PM
024 	 * </p>
025 	 * <p>
026 	 * copyright cd**** 2010-2011, all rights reserved.
027 	 * </p>
028 	 * @author IT山人
029 	 * @since 1.0
030 	 * @version 1.0
031 	 */
032 	public class SqlServiceImpl extends HibernateDaoSupport {
033 	 
034 	    /**
035 	     * <p>
036 	     * exeSQL方法-執行update/delete等語句.
037 	     * </p>
038 	     * <p>
039 	     * 建立人 IT山人 建立時間 2010-6-21 - 下午08:54:04
040 	     * </p>
041 	     * @param sql 待執行的sql語句
042 	     * @return 操做的記錄數量
043 	     */
044 	    private int exeSQL(final String sql) {
045 	        return (Integer) super.getHibernateTemplate().execute(new HibernateCallback(){
046 	            Connection connection = null;
047 	            PreparedStatement statement = null;
048 	            @Override
049 	            public Object doInHibernate(Session session)
050 	                    throws HibernateException, SQLException {
051 	                connection = SessionFactoryUtils.getDataSource(session.getSessionFactory()).getConnection();
052 	                statement = connection.prepareStatement(sql);
053 	                return statement.executeUpdate();
054 	            }
055 	        });
056 	    }
057 	 
058 	    /**
059 	     * <p>
060 	     * querySQL方法-運行select的查詢語句.
061 	     * </p>
062 	     * <p>
063 	     * 建立人 IT山人 建立時間 2010-6-21 - 下午08:55:25
064 	     * </p>
065 	     * @param sql 待執行的sql語句
066 	     * @return List<Object[]> 查詢結果集合
067 	     */
068 	    private List<Object[]> querySQL(final String sql) {
069 	        List<Object[]> resultList = new ArrayList<Object[]>();
070 	        Connection connection = null;
071 	        PreparedStatement statement = null;
072 	        ResultSet rs = null;
073 	        try {
074 	            connection = SessionFactoryUtils.getDataSource(super.getHibernateTemplate().getSessionFactory()).getConnection();
075 	            statement = connection.prepareStatement(sql);
076 	            rs = statement.executeQuery();
077 	            ResultSetMetaData rsmd = rs.getMetaData();
078 	            int columnCount = rsmd.getColumnCount();
079 	            Object[] objects = new Object[columnCount];
080 	            // 數據庫列名
081 	            for (int i = 0; i < columnCount; i++) {
082 	                objects[i] = rsmd.getColumnName(i+1);
083 	            }
084 	            resultList.add(objects);
085 	             
086 	//          // 列別名
087 	//          objects = new Object[columnCount];
088 	//          for (int i = 0; i < columnCount; i++) {
089 	//              objects[i] = rsmd.getColumnLabel(i+1);
090 	//          }
091 	//          resultList.add(objects);
092 	             
093 	            // 數據集合
094 	            while(rs.next()){
095 	                objects = new Object[columnCount];
096 	                for (int i = 0; i < columnCount; i++) {
097 	                    objects[i] = rs.getObject(i+1);
098 	                }
099 	                resultList.add(objects);
100 	            }
101 	        } catch (Exception e) {
102 	            // TODO: handle exception
103 	            e.printStackTrace();
104 	        } finally {
105 	            release(rs, statement, connection);
106 	        }
107 	        return resultList;
108 	    }
109 	     
110 	    /**
111 	     * <p>
112 	     * release方法-資源釋放.
113 	     * </p>
114 	     * <p>
115 	     * 建立人 IT山人 建立時間 2010-6-21 - 下午08:52:40
116 	     * </p>
117 	     * @param rs java.sql.ResultSet
118 	     * @param sta java.sql.Statement
119 	     * @param conn java.sql.Connection
120 	     */
121 	    public static void release(ResultSet rs, Statement sta, Connection conn) {
122 	        if (rs != null) {
123 	            try {
124 	                rs.close();
125 	            } catch (SQLException e) {
126 	                e.printStackTrace();
127 	                System.out.println("rs.close()");
128 	            }
129 	            rs = null;
130 	        }
131 	 
132 	        if (sta != null) {
133 	            try {
134 	                sta.close();
135 	            } catch (SQLException e) {
136 	                e.printStackTrace();
137 	                System.out.println("sta.close()");
138 	            }
139 	            sta = null;
140 	        }
141 	 
142 	        if (conn != null) {
143 	            try {
144 	                conn.close();
145 	            } catch (SQLException e) {
146 	                e.printStackTrace();
147 	                System.out.println("conn.close()");
148 	            }
149 	            conn = null;
150 	        }
151 	    }
152 	}
相關文章
相關標籤/搜索