zoukankan      html  css  js  c++  java
  • Apache—DBUtils框架开发

    java编程学习有一段时间了,今天突然发现以前比较基础的东西掌握的不牢固了,所以特意回顾下DBUtils架构的数据开发

    QueryRunner类

    该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。
    QueryRunner类提供了两个构造方法:
    •默认的构造方法
    •需要一个 javax.sql.DataSource 来作参数的构造方法。
     
    QueryRunner类的主要方法
    public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLException:执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。
    public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException: 几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,并且它是从提供给构造方法的数据源(DataSource) 或使用的setDataSource 方法中重新获得 Connection。
     
    public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException : 执行一个不需要置换参数的查询操作。
     
    public int update(Connection conn, String sql, Object[] params) throws SQLException:用来执行一个更新(插入、更新或删除)操作。
     
    public int update(Connection conn, String sql) throws SQLException:用来执行一个不需要置换参数的更新操作。
     
    ResultSetHandler接口
    该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。
    ResultSetHandler 接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。
     
    ResultSetHandler 接口的实现类
    ArrayHandler:把结果集中的第一行数据转成对象数组。
    ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
    BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
    BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
     
    ResultSetHandler 接口的实现类
    ColumnListHandler:将结果集中某一列的数据存放到List中。
    KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。
    MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
    MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
     
    java实现数据操作底层代码
     

    private static ComboPooledDataSource ds;
    //线程数据连接管理器
    private static ThreadLocal<Connection> map = new ThreadLocal<Connection>();

    static{
    try{
    //使用3cp0数据连接池获取数据资源
    ds = new ComboPooledDataSource();
    }catch (Exception e) {
    throw new ExceptionInInitializerError(e);
    }
    }

    public static Connection getConnection() throws SQLException{
    Connection conn = map.get(); //获取到当前线程上绑定的链接
    if(conn==null){
    conn = ds.getConnection();
    map.set(conn); //把链接绑定到当前线程上
    }
    return conn;
    }
    //开启事务
    public static void startTransaction(){
    try{
    Connection conn = map.get(); //获取到当前线程上绑定的链接
    if(conn==null){
    conn = ds.getConnection();
    map.set(conn);
    }
    conn.setAutoCommit(false);
    }catch (Exception e) {
    throw new RuntimeException(e);
    }
    }
    //提交事务
    public static void commitTransaction(){
    try{
    Connection conn = map.get(); //获取到当前线程上绑定的链接
    if(conn!=null){
    conn.commit();
    }
    }catch (Exception e) {
    throw new RuntimeException(e);
    }
    }
    //回滚事务
    public static void rollbackTransaction(){
    try{
    Connection conn = map.get(); //获取到当前线程上绑定的链接
    if(conn!=null){
    conn.rollback();
    conn.commit();
    }
    }catch (Exception e) {
    throw new RuntimeException(e);
    }
    }
    //关闭连接
    public static void closeConnection(){
    try{
    Connection conn = map.get(); //获取到当前线程上绑定的链接
    if(conn!=null){
    try{
    conn.close(); //求求大家,千万注意
    }finally{
    map.remove();//解除当前线程绑定的资源
    }
    }
    }catch (Exception e) {
    throw new RuntimeException(e);
    }
    }

    public static DataSource getDataSource(){
    return ds;
    }

    c3p0配置文件

    <named-config name="mysql">
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/day16</property>
    <property name="user">root</property>
    <property name="password">root</property>

    <property name="acquireIncrement">5</property>
    <property name="initialPoolSize">10</property>
    <property name="minPoolSize">5</property>
    <property name="maxPoolSize">30</property>
    </named-config>

  • 相关阅读:
    继续学习:C语言关键字
    继续学习C:运算符
    C语言小程序(八)、统计字母个数
    C语言小程序(七)、石头剪刀布
    飞思卡尔总结
    [原]NYOJ-子串和44
    C++函数重载详解
    趣味Shell
    C语言小程序(六)、数组操作
    C语言小程序(五)、数组查询
  • 原文地址:https://www.cnblogs.com/huy360/p/4513346.html
Copyright © 2011-2022 走看看