DBUtils概述:
是Apache组织提供的一个对JDBC进行简单封装的开源工具,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能
常用的API:
一、创建QueryRunner对象,我们使用的也是QueryRunner对象的API
二、QueryRunner执行增删改的操作,API
- public int update(String sql, Object... params):执行增删改的sql语句,params参数是可变参数,参数的个数取决于sql语句中的?的个数
ps: queryRunner.update("insert into user values(null,?,?,?)“,"张三","123456","小三");
三、执行查询的sql语句的API
- public <T> T query(String sql, ResultSetHandler<T> rsh, Object... params)
执行查询的操作,sql语句和后面的params可变参数要一一对应,
ResultSetHandler<T> rsh:表示是结果集处理者,是一个接口
使用DBUtils完成增删改:
c3p0配置文件
<c3p0-config>
<default-config>
<property name="DriverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/mybase_1?characterEncoding=utf8</property>
<property name="user">root</property>
<property name="password">rootroot</property>
<property name="initialPoolSize">5</property>
</default-config>
</c3p0-config>
public class Tests {
public static void main (String[] args) {
/*
* 分析:
* 1、导包
* 2、创建QueryRunner对象,实例化参数中传入DataSource
* 3、调用update方法完成增删改
* */
}
// 增
@Test
public void insert() throws SQLException {
DataSource dataSource = c3p0Util.getDataSource();
// 1.创建QueryRunner对象,传入
QueryRunner qr = new QueryRunner(dataSource);
// 2.调用update方法
int i = qr.update("insert into users values(null,?,?,?)", "王七", "111111", "小七");
System.out.println("受影响的行数: " + i);
}
// 删
@Test
public void delete() throws SQLException {
QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
int i = qr.update("delete from users where id = ?", "6");
System.out.println("受影响的行数:" + i);
}
// 改
@Test
public void update() throws SQLException {
QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
int i = qr.update("update users set username = ? where id = ?", "李四", "4");
System.out.println("受影响的行数" + i);
}
使用DBUtils完成查询
ResultSetHandler接口的实现类,列举几个常用的
ArrayHandler:适合查询结果是一条记录的,会把这条记录的数据封装到一个object数组中
BeanHandler:适合查询结果是一条记录的,会把这条记录的数据封装到一个javaBean中
MapHandler:适合拆线呢结果是一条记录的,会把这条记录的数据封装到一个Map集合中
ArrayListHandler:适合查询结果是多条记录的,会把每条记录的数据封装到一个object数组中,然后把这些数组添加到List集合中
BeanListHandler:适合查询结果是多条记录的,会把每条记录的数据封装到一个javaBean对象中,然后把这些javaBean对象添加到List集合中
MapListHandler:适合查询结果是多条记录的,会把每条记录的数据封装到一个Map集合中,然后把这些Map集合添加到List集合中
KeyedHandler:适合查询的结果是条件记录的,会把每条记录的诗句封装到一个Map集合中,然后把这些Map集合添加到另一个Map集合中
ColumnListHandler:适合查询的结果是单列多条记数据,会把该列的所有数据存储到List集合中
ScalarHandler:适合查询的结果是单个值的,会把这个值封装成一个对象
// 查询结果是一条记录的【 ArrayHandler】
@Test
public void select1() throws SQLException {
// 1.创建QueryRunner对象,传入连接池
QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
// 2.调用query方法
Object[] query = qr.query("select * from user where id = ?", new ArrayHandler(), 1);
System.out.println(Arrays.toString(query));
}
// 查询结果是一条记录的【 BeanHandler】
@Test
public void select2() throws SQLException {
// 1.创建QueryRunner对象,传入连接池
QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
// 2.调用query方法
User user = qr.query("select * from users where id = ?", new BeanHandler<User>(User.class), 3);
System.out.println(user);
}
// 查询结果是一条记录的【 MapHandler】
@Test
public void select3() throws SQLException {
// 1.创建QueryRunner对象,传入连接池
QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
// 2.调用query方法
Map<String, Object> map = qr.query("select * from users where id = ?", new MapHandler(), 3);
System.out.println(map);
}
// 查询结果是多条记录的【ArrayListHandler】
@Test
public void select4() throws SQLException {
// 1.创建QueryRunner对象,传入连接池
QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
// 2.调用query方法
List<Object[]> list = qr.query("select * from users", new ArrayListHandler());
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
}
// 查询结果是多条记录的【BeanListHandler】
@Test
public void select5() throws SQLException {
// 1.创建QueryRunner对象,传入连接池
QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
// 2.调用query方法
List<User> list = qr.query("select * from users", new BeanListHandler<User>(User.class));
for (User user : list) {
System.out.println(user);
}
}
// 查询结果是多条记录的【MapListHandler】
@Test
public void select6() throws SQLException {
// 1.创建QueryRunner对象,传入连接池
QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
// 2.调用query方法
List<Map<String, Object>> list = qr.query("select * from users", new MapListHandler());
for (Map<String, Object> map : list) {
System.out.println(map);
}
}
// 查询结果是多条记录的【KeyedHandler】
@Test
public void select7() throws SQLException {
// 1.创建QueryRunner对象,传入连接池
QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
// 2.调用query方法
Map<Object, Map<String, Object>> map = qr.query("select * from users", new KeyedHandler());
Set<Object> keys = map.keySet();
for (Object key : keys) {
Map<String, Object> map1 = map.get(key);
System.out.println(key+":"+map1);
}
}
// 查询结果是单列多行记录的【ColumnListHandler】
@Test
public void select8() throws SQLException {
// 1.创建QueryRunner对象,传入连接池
QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
// 2.调用query方法
List<Object> list = qr.query("select username from users", new ColumnListHandler());
System.out.println(list);
}
// 查询结果是单列单行的记录【ScalarHandler】
@Test
public void select9() throws SQLException {
// 1.创建QueryRunner对象,传入连接池
QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
// 2.调用query方法
Long count = (Long)qr.query("select count(*) from users", new ScalarHandler());
System.out.println(count);
}