今天,在百度知道 ,一位网友问到jdbc代码简化,今天花了2个小时间给他写了个。。...

xiaoxiao2022-06-11  13

代码如下: 用法是:传入一个类名 ,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)); } }}
转载请注明原文地址: https://www.6miu.com/read-4931360.html

最新回复(0)