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 }