数据库的Apache第三方jar包以及数据库连接池

commmons-dbutils-1.6.jar

操作 JDBC 连接数据库,并且执行 sql 语句,处理返回的结果集

三个核心类

DbUtils: 关闭资源的方法(安静的关闭 不需要异常处理)
QueryRunner: 执行sql语句 并且返回结果集
ResultSetHandler: 接口(使用它的实现类 传入使用结果集类的接口)
// 插入数据
 private static void insert() throw SQLException{
     // 插入一条数据使用QueryRunner
     QueryRunner qr = new QueryRunner();
     // 获取连接 (JDBCUtil是自己写好的创建连接和关闭资源的工具类)
    Connection connection = JDBCUtil.getConnection();
    String sql = "insert into sort values (null, '显示器', 5,'这是一台显示器');
    // 插入数据
    int row = qr.update(connection.sql);
    if(row > 0){
    System.out.println("插入成功");
     }
 // 安静的关闭资源
 DbUtil.closeQuietly(connection);
}
// 修改数据
private static void update() throw SQLException{
 QueryRunner qr = new QueryRunner();
    Connection connection = JDBCUtil.getConnection();
    // 使用占位符传入sql语句
    String sql = "update sort set sname=?, sprice=?, sdesc=? where sid=5";
    // 多参数传参 方式1 利用数组传
    // 方式2 直接传递参数 注意要和占位符号的顺序 对应
    Object[] params = {"咖啡",1000,"java里的咖啡"};
    int row = qr.update(connection, sql, "咖啡1",2000,"java里的咖啡");
    if (row > 0) {
        System.out.println("修改成功");
    }
    DbUtils.closeQuietly(connection);
}
使用QueryRunner进行查询操作  给QueryRunner传入的参数不同 返回的结果集也不同
@Test
    public void select1() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        // 调用查询方法
        // 传入什么内容 该类就把数据放到什么容器中 给你返回
        Object[] objects = qr.query(connection, sql, new ArrayHandler());
        for (Object object : objects) {
            System.out.println(object);
        }
        DbUtils.closeQuietly(connection);
    }
    /*
     * ArrayListhandler
     * 查询每一条记录 放到List集合中
     * 每一条记录是一个对象数组
     */
    @Test
    public  void select2() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        List<Object[]> list = qr.query(connection, sql, new ArrayListHandler());
        for (Object[] objects : list) {
            for (Object object : objects) {
                System.out.println(object);
            }
            System.out.println();
        }
        DbUtils.closeQuietly(connection);
    }

    /*
     * BeanHandler
     * 把结果集的第一行 封装成一个JavaBean对象
     * JavaBean对象规则
     * 1.成员变量私有化
     * 2.提供空参的构造方法
     * 3.提供set/get方法
     * 符合以上规则的实体类创建出来的对象 就是一个JavaBean对象
     * 
     */
    @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));
        if (sort == null) {
            System.out.println("没有该数据");
        }
        System.out.println(sort);
        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<String> list = qr.query(connection, sql, new ColumnListHandler<String>("sname"));
        for (String string : list) {
            System.out.println(string);
        }
        DbUtils.closeQuietly(connection);
    }

    /*
     * ScalarHandler
     * 只返回一个结果 多用于sql语句的聚合查询
     */
    @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
     * 将第一条数据存放在map中 以键值对的形式 键:列名  值: 列值
     */
    @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
     *  返回全部数据 将存有数据的map存到list中 在返回去
     */
    @Test
    public void select8() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        List<Map<String,Object>> list = qr.query(connection, sql, new MapListHandler());
        for (Map<String, Object> map : list) {
            for (String key : map.keySet()) {
                System.out.println(key + "  " + map.get(key));
            }
        }
        DbUtils.closeQuietly(connection);
    }
}

数据库连接池

java为了解决频繁创建数据库连接和释放数据库连接的问题
使用数据库连接池来解决 并且出了一套规范
数据库连接规范(接口)
javax.sql.DataSource  java扩展包
由数据库厂商来提供的 
常用数据库连接池 DBCP C3P0
需要导入的jia包(dbcp中依赖pool jia包种的类)
commons-dbcp-1.4.jar
commons-pool-1.5.6.jar
BasicDataSource 是 DataSource(规范类) 的实现类
基础设置 (要使用数据库连接池 必须要设置的内容)
mysql驱动类 com.mysql.jdbc.Driver
访问数据库连接地址
数据库访问用户名 和 密码
public class DataSourceUtil {
    private static BasicDataSource dataSource = new BasicDataSource();
    static {
        // 设置dataSource
        // 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;
    }   
}
//  测试DataSourceUtil类
public static void main(String[] args) throws SQLException {
    // 数据库连接池和QueryRunner结合使用
    QueryRunner qr = new QueryRunner(DataSourceUtil.getDataSource());
    // 插入一条数据
    String sql = "insert into sort values (null, ?, ?, ?)";
    Object[] params = {"试卷", 10, "一份万分试卷"};
    int row = qr.update(sql, params);
    if (row > 0) {
        System.out.println("插入成功");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值