引言
主要使用数据库连接池,dbutils(QueryRunner类,ResultSetHandler接口及实现类)
- 第一步 创建QueryRunner对象
- 第二步 QueryRunner对象执行sql语句,返回结果
- 第三步 关闭连接
代码示例:
package demo2;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import javax.swing.JButton;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;
import utils.JDBCUtils;
public class Test2 {
//修改id为23的birth为1999-09-09
@Test
public void test1() throws SQLException{
//创建QueryRunner
QueryRunner runner = new QueryRunner();
//获取连接
Connection conn = JDBCUtils.getConnection3();
//创建sql语句
String sql="update customers set birth=? where id=?";
//执行sql语句
int update = runner.update(conn, sql, "1999-09-09",23);
System.out.println(update);
//关闭连接
JDBCUtils.closeResource1(conn, null, null);
}
//MapHandler获取id为23的name,email,birth
@Test
public void test2() throws SQLException{
//创建QueryRunner
QueryRunner runner = new QueryRunner();
//获取连接
Connection conn = JDBCUtils.getConnection3();
//创建sql语句
String sql="select name,email,birth from customers where id=?";
//执行sql语句
Map<String, Object> query = runner.query(conn, sql, new MapHandler(), 23);
System.out.println(query);
//关闭连接
JDBCUtils.closeResource1(conn, null, null);
}
//MapListHandler获取id小于23的name,email,birth
@Test
public void test3() throws SQLException{
//创建QueryRunner
QueryRunner runner = new QueryRunner();
//获取连接
Connection conn = JDBCUtils.getConnection3();
//创建sql语句
String sql="select name,email,birth from customers where id<?";
//执行sql语句
List<Map<String,Object>> query = runner.query(conn, sql, new MapListHandler(), 23);
for(Map<String, Object> map:query){
System.out.println(map);
}
//关闭连接
JDBCUtils.closeResource1(conn, null, null);
}
//BeanHandler获取id为23的name,email,birth
@Test
public void test4() throws SQLException{
//创建QueryRunner
QueryRunner runner = new QueryRunner();
//获取连接
Connection conn = JDBCUtils.getConnection3();
//创建sql语句
String sql="select name,email,birth from customers where id=?";
//执行sql语句
Customer customer = runner.query(conn, sql, new BeanHandler<>(Customer.class), 23);
System.out.println(customer);
//关闭连接
JDBCUtils.closeResource1(conn, null, null);
}
//BeanListHandler获取id小于23的name,email,birth
@Test
public void test5() throws SQLException{
//创建QueryRunner
QueryRunner runner = new QueryRunner();
//获取连接
Connection conn = JDBCUtils.getConnection3();
//创建sql语句
String sql="select name,email,birth from customers where id<?";
//执行sql语句
List<Customer> list = runner.query(conn, sql, new BeanListHandler<>(Customer.class), 23);
for(Customer c:list){
System.out.println(c);
}
//关闭连接
JDBCUtils.closeResource1(conn, null, null);
}
//ScalarHandler00000获取birth最大的值
@Test
public void test6() throws SQLException{
//创建QueryRunner
QueryRunner runner = new QueryRunner();
//获取连接
Connection conn = JDBCUtils.getConnection3();
//创建sql语句
String sql="select max(birth) from customers";
//执行sql语句
Object query = runner.query(conn, sql, new ScalarHandler());
System.out.println(query);
//关闭连接
JDBCUtils.closeResource1(conn, null, null);
}
}
介绍QueryRunner类
该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。
主要方法:更新update,查询query
介绍ResultSetHandler接口及实现类
-
该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。
-
ResultSetHandler 接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。
-
接口的主要实现类:
- ArrayHandler:把结果集中的第一行数据转成对象数组。
- ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。
- BeanHandler: 将结果集中的第一行数据封装到一个对应的JavaBean实例中。
- BeanListHandler: 将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
- ColumnListHandler:将结果集中某一列的数据存放到List中。
- KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key。
- MapHandler: 将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
- MapListHandler: 将结果集中的每一行数据都封装到一个Map里,然后再存放到List
- ScalarHandler: 查询单个值对象