JDBC连接池&DButils

一、JDBC连接池

  • 概念:实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决这个问题,通过我们采用连接池技术,来共享链接Connection,解决资源浪费,提高代码性能,代码没有节省

  • 规范:java为数据库连接池提供了公共的接口 javax.sql.DataSource,常见的连接池:DBCP\C3P0都用不同的方法实现了这个接口

二、C3P0连接池

  • 使用步骤
    1. 导入2个jar包

    2.配置文件设置参数
    配置文件名称:c3p0-config.xml(固定)
    配置文件位置:src(类路径)
    配置文件内容:修改常见配置项包括必须项user,password,diverClass(驱动,如com.mysql.jdbc.Driver),jdbcUrl(mysql路径,如jdbc:mysql://localhost:3306/数据库名称)和一些其他的基本配置项
    3.编写工具类
    c3p0提供核心工具类:ComboPooledDataSource,要使用连接池就必须创建该类的实例对象(注意区分命名配置和默认配置)
    此外,需要自己创建一个工具类,例如C3P0Utils,该类的代码应包括如下

三、使用DBUtils操作增删改查

  • 概念:如果只使用JDBC开发,会有大量冗余代码,为了简化开发就使用apache commons组件的成员之一:DBUtils(封装了对JDBC的操作)
  • 三个核心功能
    1.QueryRunner中提供对sql语句操作的API
    2.ResultSetHandler接口,用于定义select操作后,怎样封装结果集
    3.DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法

四、 QueryRunner核心类

  • QueryRunner(DataSource ds),提供数据源(连接池),DBUtils底层自动维护链接connection
  • update(String sql,Object..params),执行更新数据
  • QueryRunner的查询方法是:
    public <T> T query(String sql, ResultSetHandler<T> rh, Object… params)
    public <T> T query(Connection con, String sql, ResultSetHandler<T> rh, Object… params)
    query()方法会通过sql语句和params查询出ResultSet,然后通过rh把ResultSet转换成对应的类型再返回

五、ResultSetHandler结果集处理类

  • 执行select语句之后得到的是ResultSet,然后对ResultSet进行转换,得到最终我们想要的数据。可以把ResultSet的数据放到一个List中,也可以放到一个Map中,或是一个Bean中。
  • DBUtils提供了一个接口ResultSetHandler,它就是用来将ResultSet转换成目标类型的工具。

    案例讲解:
  • BeanListHandler的使用:


    image.png
  • BeanHandler的使用:
    该方法中调用query(sql,rsh,param),其中第三个参数需要现在该方法括号内声明变量,且该方法直接声明为Product类型,所以将查询返回的单一的查询结果直接return。


    image.png

六、DBUtils工具类

closeQuietly(Connection conn)关闭连接,如果有异常try后不抛出
commitAndCloseQuietly(Connection conn)提交并关闭连接
rollbackAndCloseQuietly(Connection conn)回滚并关闭连接

综合案例

  • 案例——删除


  • 案例——查询1
public void fun1() throws SQLException {
        DataSource ds = JdbcUtils.getDataSource();
        QueryRunner qr = new QueryRunner(ds);
        String sql = "select * from tab_student where number=?";
        Map<String,Object> map = qr.query(sql, new MapHandler(), "S_2000");
        System.out.println(map);
    }
  • 案例——查询2
public void fun2() throws SQLException {
        DataSource ds = JdbcUtils.getDataSource();
        QueryRunner qr = new QueryRunner(ds);
        String sql = "select * from tab_student where number=?";
        Student stu = qr.query(sql, new BeanHandler<Student>(Student.class), "S_2000");
        System.out.println(stu);
    }

八、JavaBean组件

  • 概念:JavaBean就是一个类,在开发中常用于封装数据
  • 特性
    1. 需要实现接口:java.io.Serializable (通常省略不写)
    2. 提供私有字段:private 类型 字段名;
    3. 提供getter/setter方法
    4. 提供无参函数
  • 举例


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 本文包括:1、DBUtils简介2、DbUtils类3、QueryRunner类4、ResultSetHandle...
    廖少少阅读 20,535评论 1 24
  • JDBC概述 在Java中,数据库存取技术可分为如下几类:JDBC直接访问数据库、JDO技术、第三方O/R工具,如...
    usopp阅读 3,526评论 3 75
  • 本文包括传统JDBC的缺点连接池原理自定义连接池开源数据库连接池DBCP连接池C3P0连接池Tomcat内置连接池...
    廖少少阅读 16,723评论 0 37
  • JDBC框架——DBUtils 本文包括: 1、DBUtils简介 2、DbUtils类 3、QueryRunne...
    加油小杜阅读 861评论 0 1
  • 前言: 从事Android开发一年半啦,只知道每天按照需求计划实现业务的逻辑,其实我知道我最差的就是绘制图形,所以...
    林天佐阅读 214评论 0 0