同过使用C3P0建立的对mysql数据库CRUD操作的工具类

jopen 10年前
    package util;        import java.sql.Connection;        import java.sql.PreparedStatement;        import java.sql.ResultSet;        import java.sql.SQLException;                import com.mchange.v2.c3p0.ComboPooledDataSource;                public class JdbcUtilC3P0 {            // 创建连接池的数据源对象            // mysql指定的是从c3p0-config.xml配置文件中选择那个链配置进行连接            private static ComboPooledDataSource cpds = new ComboPooledDataSource(                    "mysql");                    // 书写返回连接对象的方法            public static Connection getConn() {                try {                    return cpds.getConnection();                } catch (SQLException e) {                    e.printStackTrace();                }                return null;            }                    // 书写cud的通用的方法            public static void update(String sql, Object params[]) {                // 声明预处理对象                PreparedStatement pstmt = null;                try {                    // 获取预处理对象                    pstmt = getConn().prepareStatement(sql);                    // 为sql语句进行赋值处理                    if (params != null) {                        for (int i = 0; i < params.length; i++) {                            // 为占位符赋值处理                            pstmt.setObject(i + 1, params[i]);                        }                        // 执行cud的操作                        pstmt.executeUpdate();                    } else {                        System.out.println("参数列表为null");                    }                        } catch (SQLException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                } finally {                    release(null, pstmt, null);                }            }                    // r的操作方法(查询的操作处理            public static Object query(String sql, Object[] params,                    ResultSetHandler resultSetHandler) {                PreparedStatement pstmt = null;                ResultSet rs = null;                try {                    pstmt = getConn().prepareStatement(sql);                    // 参数列表不为null                    if (params != null) {                        // 循环赋值                        for (int i = 0; i < params.length; i++) {                            pstmt.setObject(i + 1, params[i]);                        }                    }                    //执行查询                    rs = pstmt.executeQuery();                    //将rs结果集交给resultSetHandler处理对象进行处理,并将结果返回                    return resultSetHandler.handler(rs);                        } catch (SQLException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                } catch (Exception e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }                        return null;            }                    // 释放资源的操作            public static void release(ResultSet rs, PreparedStatement pstmt,                    Connection conn) {                if (rs != null) {                    try {                        rs.close();                    } catch (SQLException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                    }                }                if (pstmt != null) {                    try {                        pstmt.close();                    } catch (SQLException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                    }                }                if (conn != null) {                    try {                        conn.close();                    } catch (SQLException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                    }                }                    }        }  

下面是用来处理接口

    package util;                import java.sql.ResultSet;                public interface ResultSetHandler {            // 交给调用者处理            public Object handler(ResultSet rs) throws Exception;        }  

下面是处理查询单条数据时用到的处理类
    package util;                import java.lang.reflect.Field;        import java.sql.ResultSet;        import java.sql.ResultSetMetaData;                        //这是获取单个数据的处理类        public class BeanHandler implements ResultSetHandler {                    // 声明接收要处理的bean的class对象            private Class<?> cls;                    // 构造器为接收的class赋值            public BeanHandler(Class<?> cls) {                super();                this.cls = cls;            }                    // 处理接收到的对象            @Override            public Object handler(ResultSet rs) throws Exception {                // 判断结果集中是否还有数据                if (rs.next()) {                    // 同过反射处理获取要处理class的对象                    Object bean = cls.newInstance();                    // 获取ResultSet的元数据的ResultSetMetaData对象                    ResultSetMetaData metaData = rs.getMetaData();                    // 循环遍历,为bean内的属性赋值                    for (int i = 1; i <= metaData.getColumnCount(); i++) {                        // 通过元数据获取要赋值的数据字段                        String columnName = metaData.getColumnName(i);                        // 获取字段对应额数据值                        Object columnValue = rs.getObject(columnName);                                // 通过反射获取bean的字段名称对应的Field对象                        // getDeclaredField("");获取指定的字段已经声明过的Field对象                        Field field = bean.getClass().getDeclaredField(columnName);                        // 设置暴力反射开启                        field.setAccessible(true);                        // 为bean中的属性赋值                        field.set(bean, columnValue);                    }                    // 返回设置属性后的bean                    return bean;                } else {                    return null;                }            }                }  

下面是处理查询多条数据时用到的处理类
    package util;                import java.lang.reflect.Field;        import java.sql.ResultSet;        import java.sql.ResultSetMetaData;        import java.util.ArrayList;        import java.util.List;                        //这是获取数据库中所有的数据的处理类        public class BeanListHandler implements ResultSetHandler {            // 声明接收要处理的bean的class对象            private Class<?> cls;                    // 构造器为接收的class赋值            public BeanListHandler(Class<?> cls) {                super();                this.cls = cls;            }                    // 处理接收到的对象            @Override            public Object handler(ResultSet rs) throws Exception {                // 声明返回的数据集合                List<Object> list = new ArrayList<Object>();                // 判断结果集中是否还有数据                while (rs.next()) {                    // 同过反射处理获取要处理class的对象                    Object bean = cls.newInstance();                    // 获取ResultSet的元数据的ResultSetMetaData对象                    ResultSetMetaData metaData = rs.getMetaData();                    // 循环遍历,为bean内的属性赋值                    for (int i = 1; i <= metaData.getColumnCount(); i++) {                        // 通过元数据获取要赋值的数据字段                        String columnName = metaData.getColumnName(i);                        // 获取字段对应额数据值                        Object columnValue = rs.getObject(columnName);                                // 通过反射获取bean的字段名称对应的Field对象                        // getDeclaredField("");获取指定的字段已经声明过的Field对象                        Field field = bean.getClass().getDeclaredField(columnName);                        // 设置暴力反射开启                        field.setAccessible(true);                        // 为bean中的属性赋值                        field.set(bean, columnValue);                    }                    // 将设置好的目标对象添加到list集合                    list.add(bean);                }                return list;            }        }  

下面是通过C3P0连接数据时用到的连接配置文件
    <?xml version="1.0" encoding="UTF-8"?>        <c3p0-config>          <named-config name="xx">            <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>                    <property name="driverClass">com.mysql.jdbc.Driver</property>                   <property name="user">root</property>                   <property name="password">admin</property>            <property name="initialPoolSize">10</property>                  <property name="maxPoolSize">30</property>            <property name="minPoolSize">10</property>            <property name="acquireIncrement">5</property>          </named-config>                    <named-config name="mysql">                <property name="driverClass">com.mysql.jdbc.Driver</property>                <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>                <property name="user">root</property>                <property name="password">admin</property>                                <property name="acquireIncrement">5</property>                <property name="initialPoolSize">10</property>                <property name="minPoolSize">5</property>                <property name="maxPoolSize">30</property>            </named-config>        </c3p0-config>  

c3p0的链接还需要用到

c3p0-0.9.5-pre6.jar

mchange-commons-java-0.2.6.3.jar

两个包

来自:http://blog.csdn.net/dong_martin/article/details/17886147