一、commons-dbutils-1.6.jar
1.作用:用于操作jdbc连接数据库并且用来执行是sql语句处理返回结果集的架包
2.三个核心类
1)DbUtils:用来关闭资源的类,其中的closeQuietyl()方法关闭资源时,不需要进行异常处理
2)QueryRunner:用来查询结果集,并且返回你想要的结果集
3)参数ResultSetHandel是接口,我们想要什么结果集,就用它对应的实现类
eg:通过第三方架包实现数据的更新和添加

public class Demo01{
publc static void main(String [] args) throws SQLException{
//添加方法
    //insert();
 //更新方法
  update();
}
  //更新方法
  private static void update() throws SQLException{
      QueryRunner qr = new QueryRunner();
     //获取连接
     Connection connection = JDBCUtil.getConnection();
    //使用占位符传入sql语句
String sql = "update sort set sname =?"+",sprice=?,sdesc=? where sid=5";
//方式一,利用数组
Object[] params = {"咖啡",10000,"java里的咖啡"};
int row = qr.update(connection,sql,params)
//方式二,直接船体,要和占位符对应
int row = qr.update(connection,sql,"咖啡",10000,"java里的咖啡");
if(row>0){
    System.out.println("修改成功");
}
//用第三方的关闭资源
DbUtils.closeQuietly(connection);
  }
  //添加
  private static void insert() throws SQLException{
      QueryRunner qr = new QueryRunner();
      Connection connection = JDBCUtil.getConnection();Connection connection = JDBCUtil.getConnection();
        String sql = "insert into sort values (null,'20k显示器',5,'这时一台播放家教的显示器')";

       int row = qr.update(connection, sql);
       System.out.println(row);
       if(row>0) {
           System.out.println("显示成功");
       }
       //安静的关闭资源
       DbUtils.closeQuietly(connection);
}
}
//第三方架包的查询
public class Demo02 {
//查询操作
//8个结果集
    /*
     * 结果集容器1
     * ArrayHandler
     * 把查询出来的数据的第一行,放进对象数据中并返回
     * 
     */
    @Test
    public void select1() throws SQLException {
        QueryRunner qr =new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "Select * from sort";
        //调用查询方法
        //传入什么容器,该类就把数据放到什么容器中给你返回
        Object[] rel = qr.query( connection,sql, new ArrayHandler());
        for (Object object : rel) {
            System.out.println(object);
        }
        DbUtils.closeQuietly(connection);   
    }
    /*
     * ArrayListHander
     * 查询每一条记录放到ArrayListHander集合中
     * 每一条记录是一个对象数组
     */
    @Test
    public void select2() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        List<Object[]> query = qr.query(connection, sql, new ArrayListHandler());
        for (Object[] objects : query) {
            for (Object object : objects) {
                System.out.println(object);
            }
            System.out.println();
        }
        DbUtils.closeQuietly(connection);
    }

 /*
  * BeanHandler
  * 把结果集的第一行封装成一个JavaBean对象
  * 1.成员变量私有化
  * 2.提供空参的构造方法
  * 3.提供set/get方法
  * 符合以上的规则的实体类创建出来的对象
  * 
  */
    @Test
    public void select3() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        //要把使用哪个javabean实体类传进去,也就是类名.class
        Sort sort = qr.query(connection, sql, new BeanHandler<>(Sort.class));
        System.out.println(sort);
        if(sort==null) {
            System.out.println("没有该条数据");
        }
        DbUtils.closeQuietly(connection);

    }   

    /*
     * BeanListHandler----最多应用
     */
    @Test
    public void select4() throws SQLException {
         QueryRunner qr = new QueryRunner();
         Connection connection = JDBCUtil.getConnection();
         String sql = "select * from sort";
         List<Sort> list = qr.query(connection, sql, new BeanListHandler<>(Sort.class));
         for (Sort sort : list) {
            System.out.println(sort);
        }
         DbUtils.closeQuietly(connection);
    }


    /*
     * ColumnListhandler
     * 查询指定列,返回指定列数据放在list集合中
     * 
     */
    @Test
    public void select5() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        List<Object> query = qr.query(connection, sql, new ColumnListHandler<>("sname"));
        for (Object object : query) {
            System.out.println(object);
        }
        DbUtils.closeQuietly(connection);
    }
    /*
     * ScalarHandler 查询只有一个结果
     *  
     *  查询结果是一个的时候使用的
     */
    @Test
    public  void select6() throws SQLException {
         QueryRunner qr = new QueryRunner();
         Connection connection = JDBCUtil.getConnection();
         String sql ="select avg(sid) from sort";
         BigDecimal query = qr.query(connection, sql,new ScalarHandler<BigDecimal>());
         System.out.println(query);
         DbUtils.closeQuietly(connection);
    }

    /*
     * MapHandler
     * 
     * 
     */

    @Test
    public void select7() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql= "select * from sort";
        Map<String, Object> map = qr.query(connection, sql, new MapHandler());
        for (String key : map.keySet()) {
            System.out.println(key + "  " + map.get(key));

        }
        DbUtils.closeQuietly(connection);
    }

    /*
     * MapListHandler
     * 
     * 
     */

    @Test
    public void select8() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql= "select * from sort";
        List<Map<String, Object>> query = qr.query(connection, sql, new MapListHandler());
         for (Map<String, Object> map : query) {
             for (String key : map.keySet()) {
                System.out.println(key + " "+ map.get(key));
            }
        }
         DbUtils.closeQuietly(connection);
    }



}
3.数据源
/*
 * 数据源
 * java为了解决频繁创建数据库连接和释放数据库连接的问题
 * 使用数据库连接池来解决  并且 出了一套规范-- 数据库连接池规范(接口)、
 * javax.sql.DataSource  java扩展包
 * 由数据库厂商来提供的
 * 常用数据库连接池:DBCP  C3P0
 * 需要导入的架包:导入的dbcp中的类需要引用pool jar中的类
 * commons-dbcp-1.4.jar
 * commons-pool-1.5.6.jar
 * 基础设置(要使用数据库连接池,必须要设置的内容):
 * BasicDataSource 和 DataSource的关系
 *BasicDataSource 是DataSource(规范类)的实现类
 *mysql驱动类 com.mysql.jdbc.Driver
 *访问数据库的链接地址
 *访问数据库的用户名和密码
 */
public class DataSourceUtil {
    //获取数据库,连接池
    private static BasicDataSource  dataSource = new BasicDataSource();
    static {
        //mysql的驱动类 全限定类名
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/myjdbc");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        //扩展设置
          dataSource.setInitialSize(10);//初始化连接数
          dataSource.setMaxActive(8);//设置最多连接数
          dataSource.setMaxIdle(5);//做多空闲数
          dataSource.setMinIdle(2);//做小空闲连接数

    }
    //获取数据库连接
     public static DataSource getDataSource() {
        return dataSource;
     }
    //设置dataSorce
    //获取数据连接


}