数据库连接池
DBCP数据源
DBCP是数据库连接池(DataBase Connection Pool)的简称,是Apache组织下的开源连接池实现,也是Tomcat服务器使用的连接池组件。单独使用DBCP数据源时,需要在应用程序
中导入两个JAR包,具体如下。
1.commons-dbcp.jar包
commons-dbcp.jar包是DBCP数据源的实现包,包含所有操作数据库连接信息和数据库连接池初始化信息的方法,并实现了DataSource接口的getConnection()方法。
2. commons-pool.jar包
commons-pool.jar包是DBCP数据库连接池实现包的依赖包,为commons-dbcp.jar包中的方法提供了支持。可以这么说,没有该依赖包,commons-dbcp.jar包中的很多方法就没有办法实现。
这两个JAR包可以在Apache官网地址“http://commons.apache.org/proper/”中查询下载到。其中,commons-dbcp.jar中包含两个核心的类,分别是BasicDataSourceFactory和BasicDataSource,它们都包含获取DBCP数据源对象的方法。
通过 BasicDataSource 类直接创建数据源对象
在Eclipse中创建一个名称为chapter10的Web项目,在项目chapter10中导入mysql-connector-java-5.0.8-bin.jar、commons-dbcp-1.4.jar 以及 commons-pool-1.6.jar 3个JAR包,并发布到类路径下
然后在项目的src目录下创建包pidan.example,并在该包下创建一个Example01类,该类采用手动方式获取数据库的连接信息和数据源的初始化信息
运行main()方法后,程序的运行结果如图
通过读取配置文件创建数据源对象
除了使用BasicDataSource 直接创建数据源对象外,还可以使用BasicDataSourceFactory工厂类读取配置文件,创建数据源对象,然后获取数据库连接对象。
(1)在chapter10项目的src目录下创建dbcpconfig.properties文件,该文件用于设置数据库的连接信息和数据源的初始化信息
(2)在pidan.example包下创建一个Example02类,该类中采用了从配置文件中获取数据库的连接信息和数据源的初始化信息的方式
运行main()方法后,程序的运行结果如图
通过 ComboPooledDataSource()构造方法创建数据源对象
(1)在项目chapter10中导入JAR包c3p0-0.9.1.2.jar,然后在cn.itcast.chapter10.example
包下创建一个Example03类,该类采用C3PO数据源手动代码的方式获取Connection对象
通过读取配置文件创建数据源对象
使用 ComboPooledDataSource(String configName)构造方法读取c3p0-config.xml配
置文件,从而创建数据源对象,然后获取数据库连接对象。
(1)在src根目录下创建一个c3p0-config.xml文件,用于设置数据库的连接信息和数据源的初始化信息
c3p0-config.xml 配置了两套数据源,<default-config>.…</default-config>中的信息是默认配置,在没有指定配置时默认使用该配置创建C3p0数据源对象;<named-config>…</ named-config >中的信息是自定义配置,一个配置文件中可以有零个或多个自定义配置,当用户需要使用自定义配置时,调用ComboPooledDataSource(String configName)方法,传入<named-config>节点中name属性的值即可创建C3PO数据源对象。这种设置的好处是,当程序在后期更换数据源配置时,只需要修改构造方法中对应的name值即可。
(2)在pidan.example包下创建一个Example04类,该类中使用C3P0数据源从配置文件中获取Connection对象
运行main()方法后,程序的运行结果如图
DBUtils 工具
ResultSetHandler 实现类
1. BeanHandler 和 BeanListHandler
BeanHandler和BeanListHandler实现类是将结果集中的数据封装到对应的JavaBean实例中,这也是实际开发中最常用的结果集处理方法。
(1)在名为jdbc的数据库中创建数据表user,创建语句如下
向user表插入3条数据,具体语句如下
为了查看数据是否添加成功,使用SELECT语句查询user表
(2)将下载的DBUtils 工具的JAR包commons-dbutils-1.6.jar添加到项目的 lib目录中,并将第9章中文件JDBCUtils.java复制到pidan.example包下。
(3)在chapter10项目的pidan.example包中创建一个名为BaseDao的类,该类中编写了一个通用的查询方法
(4)在pidan.example包下创建实体类User,使用该类来封装User对象(建议自己getset)
(5)在 pidan.example包下创建类ResultSetTest1,该类用于演示BeanHandler类对结果集的处理
6)执行类ResultSetTest1中的main()方法
输出结果可以看出,BeanHandler已成功将id为1的数据存入到了实体对象user中。
(7)在pidan.example包下创建类ResultSetTest2,该类用于演示BeanListHandler类对结果集的处理
(8)执行类ResultSetTest2中的main()方法
由输出结果可以看出,testBeanListHandler()方法可以将每一行的数据都封装到user实体对象中,并将其存放到list中。
2. ScalarHandler
在使用DBUtils工具操作数据库时,如果需要输出结果集中一行数据的指定字段值,可以使用ScalarHandler类。
(1)在 pidan.example 包下创建类 ResultSetTest3,该类用于演示 ScalarHandler类的使用方法
(2)执行类ResultSetTest3中的main()方法
【任务】使用DBUtils实现增删改查
1.创建C3p0Utils类
在项目chapter10的src目录下,创建一个名为pidan.jdbc.utils的包,然后在该包下创建C3p0Utils类,该类用于创建数据源
2.创建DBUtilsDao类
在项目chapter10的src目录下,创建一个名为pidan.jdbc.demo的包,然后在该包下创建一个DBUtilsDao类,该类实现了对user表增删改查的基本操作。
上述代码中,使用了QueryRunner类中带参的方法,将数据源传给QueryRunner对象,并使用QuervRunner对象创建和关闭了数据库连接。
这样,就实现了用DBUtils工具对数据库的基本操作。需要注意的是,在查询方法中,用到了 BeanHandler和BeanListHandler实现类来处理结果集,查询一条数据用的是能够处理一行数据的BeanHandler类,查询所有数据时用的是能处理所有行数据的BeanListHandler类,切勿错误使用,否则会造成程序报错。
3.测试DBUtilsDao类中的增删改查操作
(1)增加数据。在 pidan.jdbc.demo包中创建类DBUtilsDaoTest1对增加操作进行测试
执行DBUtilsDaoTest1的控制台执行结果
从图中可以看到,控制台的输出结果为true,这说明执行插入操作成功。此时在数据库中查询user表中的数据,查询结果如图
从图中可以看出,添加方法执行成功。
(2)修改数据。在pidan.jdbc.demo包下创建测试类DBUtilsDaoTest2。
执行DBUtilsDaoTest2的控制台执行结果
从图中可以看出,程序已经执行成功。此时再次查询数据库中user表的数据,查询结果如图
从图中可以看出,修改方法执行成功。
(3)删除数据。在pidan.jdbc.demo包下创建测试类DBUtilsDaoTest3
执行DBUtilsDaoTest3的控制台执行结果
从图中可以看到,控制台显示的输出结果为true,此时查询数据库中user表的数据,查询结果如图
从图中可以看出,已成功删除user表中id为4的数据。
(4)查询数据。在pidan.jdbc.demo包下创建测试类DBUtilsDaoTest4
执行DBUtilsDaoTest4的控制台执行结果
从图中可以看出,控制台已经成功显示出了id为2的数据信息,这说明查询方法也成功执行了。至此,已经完成了使用DBUtils工具对数据库进行的基本操作。从代码上可以看出,DBUtils工具在减少代码量的同时,还增强了代码的规整性和易读性。