为了账号安全,请及时绑定邮箱和手机立即绑定

Java篇-DBUtils与连接池

标签:
Java

一 : DBUtils

DBUtils就是为了简化JDBC的快发而产生的开发工具包.对JDBC的一种封装.

核心功能

1. QueryRunner 中提供对sql语句操作的API

update(Connection conn, String sql, Object... params)  用来完成数据表的增删改操作.

增添

//增
    public static void insert() throws SQLException{
    
    Object[] par = {"牛油果热辣藤椒鸡超级可塔",23.5};
        
    String sql = "insert into product (pname,price) values (?,?)";
    QueryRunner qr = new QueryRunner();    int row = qr.update(con, sql, par);
    System.out.println(row);
    DbUtils.close(con);
    
    }

删除

//删
    public static void delete() throws SQLException{
        String sql = "delete from product where id = ?";
        QueryRunner qr = new QueryRunner();        int row = qr.update(con, sql, 4);
        System.out.println(row);
        DbUtils.close(con);
        
    }

更改

//改
    public static void update() throws SQLException{
        
        Object[] par = {"肯德基CP堡",28.5,2};
        String sql = "update product set pname = ?,price = ? where id = ?";
        QueryRunner qr = new QueryRunner();        int row = qr.update(con, sql, par);
        System.out.println(row);
        DbUtils.close(con);
        
    }
2. ResultSetHandler接口,用于定义select操作后,怎样封装结果集.

其子类以及功能包括


webp

子类功能列表

JavaBean 介绍,好像是我们通常用的mvc中model模型,其实就是一个类,
提供私有字段 : private类型 字段名;
提供getter/setter方法;
提供无参构造器,注意:无参构造器一定要提供否则会报错.
也可以实现java.io.Serializable接口

package com.tiantianBaby.java;public class Product {    
    private int id;    private String pname;    private String price;    public Product() {
        
    }    public Product(int id, String pname, String price) {        super();        this.id = id;        this.pname = pname;        this.price = price;
    }    public int getId() {        return id;
    }    public void setId(int id) {        this.id = id;
    }    public String getPname() {        return pname;
    }    public void setPname(String pname) {        this.pname = pname;
    }    public String getPrice() {        return price;
    }    public void setPrice(String price) {        this.price = price;
    }    @Override
    public String toString() {        return "Product [id=" + id + ", pname=" + pname + ", price=" + price + "]";
    }
    
}
  • ArrayHandler
public static void arrayHander() throws SQLException{
        String sql = "select * from product";
        QueryRunner qr = new QueryRunner();
        Object[] arr = qr.query(con, sql, new ArrayHandler());        for(Object obj : arr){
            System.out.println(obj);
        }
    }

打印

1
汉堡王大汉堡
23.0
  • ArrayListHandler:
//ArrayListHandler
    public static void ArrayListHandler()throws SQLException {
        String sql = "select * from product";
        QueryRunner qr = new QueryRunner();
        List<Object[]> list = qr.query(con, sql,new ArrayListHandler());        for(Object[] itemarr : list) {            for(Object obj:itemarr) {
                System.out.print(obj+"  ");
            }
            System.out.println();
        }
        
    }

打印

1  汉堡王大汉堡  23.0  2  肯德基CP堡  28.5  3  苹果笔记本  14000.0  6  板烧鸡腿堡  18.0  7  牛油果热辣藤椒鸡超级可塔  23.5  8  肯德基水果茶  11.8
  • BeanHandler
public static void BeanHandler() throws SQLException{
        
        String sql = "select * from product";
        QueryRunner qr = new QueryRunner();
        Product pro = qr.query(con, sql,new BeanHandler<Product>(Product.class));
        System.out.println(pro);
    }

打印

Product [id=1, pname=汉堡王大汉堡, price=23]
  • BeanListHandler
public static void BeanListHandler() throws SQLException{
        String sql = "select * from product";
        QueryRunner qr = new QueryRunner();
        List<Product> list = qr.query(con, sql,new BeanListHandler<Product>(Product.class));        for(Product p : list) {
            System.out.println(p);
        }
    }

打印

Product [id=1, pname=汉堡王大汉堡, price=23]
Product [id=2, pname=肯德基CP堡, price=28.5]
Product [id=3, pname=苹果笔记本, price=14000]
Product [id=6, pname=板烧鸡腿堡, price=18]
Product [id=7, pname=牛油果热辣藤椒鸡超级可塔, price=23.5]
Product [id=8, pname=肯德基水果茶, price=11.8]
  • ColumnListHandler
public static void columnListHandler() throws SQLException{
        String sql = "select * from product";
        
        QueryRunner qr = new QueryRunner();
        List<String> list = qr.query(con, sql,new ColumnListHandler<String>("pname"));        for(Object obj : list) {
            System.out.println(obj);
        }
    }

打印

汉堡王大汉堡
肯德基CP堡
苹果笔记本
板烧鸡腿堡
牛油果热辣藤椒鸡超级可塔
肯德基水果茶
  • ScalarHandler
    public static void ScalarHandler() throws SQLException {
        String sql = "select count(*) from product";
        QueryRunner qr = new QueryRunner();        long count = qr.query(con, sql,new ScalarHandler<Long>());
        System.out.println(count);
        
    }

打印

6
  • MapHandler
public static void mapHandler() throws SQLException{
        String sql = "select * from product";
        QueryRunner qr = new QueryRunner();
        Map<String,Object> map = qr.query(con, sql,new MapHandler());        for(String str : map.keySet()) {
            System.out.println(str+"---"+map.get(str));
        }
    }

打印

id---1pname---汉堡王大汉堡
price---23.0
  • MapListHandler
public static void mapListHandler() throws SQLException{        String sql = "select * from product";
        QueryRunner qr = new QueryRunner();
        List<Map<String,Object>> list = qr.query(con, sql, new MapListHandler());        for(Map<String,Object> map : list) {            
            for(String key : map.keySet()) {
                System.out.print(key+"---"+map.get(key)+"  ");
            }
            System.out.println();
        }
    }

打印

id---1  pname---汉堡王大汉堡  price---23.0  id---2  pname---肯德基CP堡  price---28.5  id---3  pname---苹果笔记本  price---14000.0  id---6  pname---板烧鸡腿堡  price---18.0  id---7  pname---牛油果热辣藤椒鸡超级可塔  price---23.5  id---8  pname---肯德基水果茶  price---11.8
3. DbUtils类,提供了关闭资源与实务的处理方法
    DbUtils.close(con);

二 : 连接池

用池来管理Connection,这样可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。

在开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,所以通常用连接池结束,来共享连接Connection.这样就不用每次都创建连接,释放链接了,这些操作都交给连接池.

DBCP连接池

DBCP是一个开源的连接池,是Apache Common成员之一,在企业开发中也比较常见,tomcat内置的连接池.

导入jar包

webp

导入jar包

DataSource接口

DataSource是java中提供的连接池,作为DriverManager工具的代替项.
在DBCP提供接口的实现类, 我们要用的具体的连接池
BasicDataSource类.

  • BasicDataSource类的常见配置
分类  属性描述
driverClassName数据库驱动名称
url数据库的地址
username用户名
password密码
maxActive最大连接数量
minActive最小连接数量
maxIdle最大空闲连接
minIdle最小空闲连接
initialSize初始化连接

连接

public class DataSourceDemo {
  public static void main(String[] args) {
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/javadatabase");
    dataSource.setUsername("root");
    dataSource.setPassword("newpass");    
    try {
        Connection con = dataSource.getConnection();
        System.out.println(con);
    } catch (SQLException e) {        //      e.printStackTrace();
        throw new RuntimeException("数据库连接失败");
    }
  }
}
封装工具类

其中地址url,用户名和密码,都可以用文件进行动态配置.

public class JDBCUtils {

    
    private static BasicDataSource datasource = new BasicDataSource();    
    static{        //数据库连接信息,必须的
        datasource.setDriverClassName("com.mysql.jdbc.Driver");
        datasource.setUrl("jdbc:mysql://localhost:3306/javadatabase");
        datasource.setUsername("root");
        datasource.setPassword("newpass");        //对象连接池中的连接数量配置,可选的
        datasource.setInitialSize(10);//初始化的连接数
        datasource.setMaxActive(8);//最大连接数量
        datasource.setMaxIdle(5);//最大空闲数
        datasource.setMinIdle(1);//最小空闲
    }    public static DataSource getDataSource() {        
        return datasource;
            
    }
}
测试工具类
public class QueryRunnerTest {

    public static void main(String[] args) {//      select();
        insert();
    }    
    private static QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());    
    
    
    public static void insert() {
        String sql = "insert into product (pname,price) values(?,?)";
        Object[] parms = {"肯德基水果茶","11.8"};        
        try {            int row = qr.update(sql,parms);
            System.out.println(row);
        } catch (SQLException e) {            // TODO Auto-generated catch block
            e.printStackTrace();            throw new RuntimeException("数据添加失败");
        }
        
        
    }    
    
    public static void select() {
        String sql = "select * from product";        try {
            List<Object[]> list = qr.query(sql, new ArrayListHandler());            for(Object[] obs : list) {                for(Object item : obs) {
                    System.out.print(item + "\t");
                }
                System.out.println();
            }
        } catch (SQLException e) {            // TODO Auto-generated catch block
            e.printStackTrace();            throw new RuntimeException("数据查询失败");
        }
        
    }
}



作者:TianTianBaby223
链接:https://www.jianshu.com/p/faa326b6b96c


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消