|
|
代码如下:
用法是:传入一个类名 ,sql语句,参数是可变的
package org.ywq.common.utils;import java.lang.reflect.Method;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import org.ywq.entity.User;/** * @author ai5qiangshao E-mail:ai5qiangshao@163.com * @version 创建时间:Aug 22, 2009 5:44:43 PM * @Package org.ywq.common.utils * @Description 类说明 */public class DBUtis<T> {private PreparedStatement psmt;private Connection conn;public DBUtis() {this.getConnection();}public Connection getConnection() {Connection conn = null;String className = "com.mysql.jdbc.Driver";String url = "jdbc:mysql://localhost:3306/hibernate";try {Class.forName(className);conn = DriverManager.getConnection(url, "root", "root");} catch (Exception e) {e.printStackTrace();}return conn;}public static void main(String[] args) throws Exception {DBUtis<User> db = new DBUtis<User>();List<User> usList = db.executeQuery(User.class,"select * from user limit 10");for (User user : usList) { System.out.println(user.getUname());}DBUtis<User> db2 = new DBUtis<User>();User u = db2.executeQueryByPk(User.class,"select * from user where uid=?", 33);System.out.println(u.getUname());}public List<T> executeQuery(Class<T> clazz, String sql, Object... params) {List<T> list = new ArrayList<T>();ResultSet rs = null;try {this.preparedStatement(sql, params);rs = this.psmt.executeQuery();while (rs.next()) {ResultSetMetaData table = rs.getMetaData();T o = clazz.newInstance();invokeSetter(clazz, rs, table, o);list.add(o);}} catch (Exception e) {e.printStackTrace();} finally {close(rs);}return list;}/*************************************************************************** * 根据主键查询 * * @param clazz * @param sql * @param params * 查询参数 * @return */public T executeQueryByPk(Class<T> clazz, String sql, Object... params) {T o = null;ResultSet rs = null;try {this.preparedStatement(sql, params);rs = this.psmt.executeQuery();o = null;if (rs.next()) {ResultSetMetaData table = rs.getMetaData();o = clazz.newInstance();invokeSetter(clazz, rs, table, o);}} catch (Exception e) {e.printStackTrace();} finally {this.close(rs);}return o;}public Integer exucuteUpdate(String sql, Object... params) {Integer result = 0;try {this.preparedStatement(sql, params);result = this.psmt.executeUpdate();} catch (SQLException e) {e.printStackTrace();} finally {this.close();}return result;}private void close(ResultSet rs) {try {if (rs != null)rs.close();if (this.psmt != null)psmt.close();if (this.conn != null)conn.close();} catch (SQLException e) {e.printStackTrace();}}private void close() {this.close(null);}private void preparedStatement(String sql, Object... params)throws SQLException {this.psmt = this.getConnection().prepareStatement(sql);setParams(params);}private void setParams(Object[] params) throws SQLException {if (params != null) {for (int i = 0; i < params.length; i++) {this.psmt.setObject(i + 1, params[i]);}}}/*************************************************************************** * 核心代码 * * @param clazz * @param rs * @param table * //表结构 * @param o * @throws Exception */private void invokeSetter(Class<?> clazz, ResultSet rs,ResultSetMetaData table, Object o) throws Exception {for (int i = 0; i < table.getColumnCount(); i++) {String column = table.getColumnName(i + 1);String setter = "set" + column.substring(0, 1).toUpperCase()+ column.substring(1);String getter = "get" + column.substring(0, 1).toUpperCase()+ column.substring(1);Method getterM = clazz.getDeclaredMethod(getter);Method setterM = clazz.getDeclaredMethod(setter,new Class[] { getterM.getReturnType() });setterM.invoke(o, rs.getObject(column));}}} |
|