DBUtils
properties配置文件
开发中获得连接的4个参数(驱动、URL、用户名、密码)通常都存在配置文件中,方便后期维护,程序如果需要更换数据库,只需要修改配置文件即可。
通常情况下,我们习惯使用properties文件,此文件我们将做如下要求:
1. 文件位置:任意,建议src下
2. 文件名称:任意,扩展名为properties
3. 文件内容:一行一组数据,格式是“key=value”.
a) key命名自定义,如果是多个单词,习惯使用点分隔。例如:jdbc.driver
b) value值不支持中文,如果需要使用非英文字符,将进行unicode转换。
DBUtils
DBUtils就是JDBC的简化开发工具包。需要项目导入commons-dbutils-1.6.jar才能够正常使用DBUtils工具。DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
Dbutils三个核心功能介绍
QueryRunner中提供对sql语句操作的API.
ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
QueryRunner
update(Connection conn, String sql, Object… params) ,用来完成表数据的增加、删除、更新操作
query(Connection conn, String sql, ResultSetHandler rsh, Object… params) ,用来完成表数据的查询操作
ResultSetHandler结果集处理类
ArrayHandler 将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
ArrayListHandler 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
BeanHandler 将结果集中第一条记录封装到一个指定的javaBean中。
BeanListHandler 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
ColumnListHandler 将结果集中指定的列的字段值,封装到一个List集合中
ScalarHandler 它是用于单数据。例如select count(*) from 表操作。
MapHandler 将结果集第一行封装到Map集合中,Key 列名, Value 该列数据
MapListHandler 将结果集第(每)一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合
C3P0:
C3P0是一个开源的JDBC连接池,目前使用它的开源项目有Hibernate,Spring等。
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。获取一个连接,系统要在背后做很多消耗资源的事情,大多时候,创建连接的时间比执行sql语句的时间还要长。用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。
数据库连接池
1:spring hibernate 都会使用
2:原因
2.1每次访问数据库都要建立新的连接,用完之后都要释放。所以访问数据库就会频繁存在,耗时,耗资源。
2.2建立连接不会保持连接状态,一般是几百毫秒。
Pool
使用pool建立数据库的连接时,时间会缩短几十倍。大约十几秒,
3:使用
3.1导入包
(1)导入c3p0 包
(2)导入MySQL包
3.2配置
在src目录下创建名为c3po-config文件xml文件。名字不能写其他的。因为将来这个xml需要加载。
4:写java代码
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="user">root</property>
<property name="password">root</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day10test</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<!-- 连接池初始化的时候的连接数 -->
<property name="initialPoolSize">5</property>
<!-- 连接池中连接的最大个数 -->
<property name="maxPoolSize">20</property>
<!-- 用户获得连接Connection的时候,如果有连接就获得,没有就等待的时间,如果超时就报异常 -->
<property name="maxIdleTime">5000</property>
<!-- 连接池中连接的最小个数 -->
<property name="minPoolSize">5</property>
</default-config>
</c3p0-config>