BDUtils

BDUtils

 

在使用JDBC进行开发时,冗余代码过多,为了简化JDBC开发,我们采用apache commons组件一个成员:DBUtils。

         DBUtils就是JDBC的简化开发工具包。需要项目导入commons-dbutils-1.6.jar才能够正常使用DBUtils工具。

 

DBUtils是java编程中的数据库操作实用工具,DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。

 

 

增删改:

update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作

 

新增

    public int add(String sname) throws SQLException{

       QueryRunner qr=new QueryRunner();

       Connection conn=JDBC.getCon();

       String sql="insert into sort(sname) values(?)";

       int row=qr.update(conn,sql,sname);

       conn.close();

       return row;

    }

 

修改分类

    public int update(int sid,String sname) throws SQLException{

       QueryRunner qr=new QueryRunner();

       Connection conn=JDBC.getCon();

       String sql="update sort set sname=? where sid=?";

       int row=qr.update(conn,sql,sname,sid);

       conn.close();

       return row;

    }

 

 

查询:

query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作

 

ResultSetHandler结果集处理类:

ArrayHandler  将结果集中的第一条记录封装到一个Object[]数组中:new ArrayHandler()

 

ArrayListHandler  将结果集中的每一条记录都封装到一个Object[]数组中:new ArrayListHandler()

 

BeanHandler  将结果集中第一条记录封装到一个指定的类中:new BeanHandler<Sort>(Sort.class)

 

BeanListHandler  将结果集中每一条记录封装到指定的自定义类中,将这些类在封装到List集合中:new BeanListHandler<自定义类>(类名.class)

 

ColumnListHandler  将结果集中指定的列的字段值,封装到一个List集合中:new ColumnListHandler<String>("字段名")

 

ScalarHandler  它是用于单数据。例如select count(*) from 表操作。:new ScalarHandler<Long>()

 

MapHandler  将结果集第一行封装到Map<String,Object>集合中,Key 列名, Value 该列数据

 

MapListHandler  将结果集每一行封装到List<Map<String,Object>>集合中,Key 列名, Value 该列数据,Map集合存储到List集合

 

 

 

连接池

实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交给了连接池

 

常见的连接池:DBCP、C3P0。

 

DBCP连接池

导入jar包:

commons-dbcp-1.4.jar

commons-pool-1.5.6.jar

 

编写工具类

 

public static final String DRIVER = "com.mysql.jdbc.Driver";
    public static final String URL = "jdbc:mysql://localhost:3306/xiangmu3?useUnicode=true&characterEncoding=UTF-8";
    public static final String USERNAME = "root";
    public static final String PASSWORD = "123456";
    /*
     * 创建连接池BasicDataSource
     */
    public static BasicDataSource dataSource = new BasicDataSource();
    
    //创建ThreadLocal对象
    private static ThreadLocal<Connection> t1=new ThreadLocal<Connection>();
    
    //静态代码块
    static {
        //对连接池对象 进行基本的配置
        dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动
        dataSource.setUrl(URL); //指定要连接的数据库地址
        dataSource.setUsername(USERNAME); //指定要连接数据的用户名
        dataSource.setPassword(PASSWORD); //指定要连接数据的密码
    }
    /*
     * 返回连接池对象
     */
    public static DataSource getDataSource(){
        return dataSource;
    }
    //从连接池中获取一条连接
    public static Connection getconn(){
        Connection conn=null;
        try {
            conn= dataSource.getConnection();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return conn;
    }
    //获取当前ThreadLocal对象中携带的连接对象
    public static Connection getCurrentConn(){
        Connection conn=t1.get();
        if(conn==null){
            conn=getconn();
            t1.set(conn);
        }
        return conn;
    }
    //开启事务
    public static void start(){
        try {
            getCurrentConn().setAutoCommit(false);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //回滚事务
    public static void roolback(){
        try {
            getCurrentConn().rollback();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //提交事务
    public static void commit(){
        try {
            getCurrentConn().commit();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

 

使用:

QueryRunner(MyDBUtils.getDataSource())方法中有个构造方法,直接传连接池对象

 

posted @ 2019-04-15 08:38  fdbnf  阅读(292)  评论(0编辑  收藏  举报