是Apache组织提供的一个对JDBC进行简单封装的开源工具,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能
一、创建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
执行查询的操作,sql语句和后面的params可变参数要一一对应,
ResultSetHandler
c3po工具类
public class c3p0Util {
// 创建c3p0连接池对象
private static final ComboPooledDataSource DATA_SOURCE = new ComboPooledDataSource();
// 获取连接的方法
public static Connection getConnection() throws SQLException {
Connection connection = DATA_SOURCE.getConnection();
return connection;
}
// 获取连接池的方法
public static DataSource getDataSource(){
return DATA_SOURCE;
}
// 资源的释放
public static void release(ResultSet resultSet, Statement statement, Connection connection){
if(resultSet != null){
try {
resultSet.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(statement != null){
try {
statement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(connection != null){
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
c3p0配置文件
com.mysql.jdbc.Driver
jdbc:mysql://127.0.0.1:3306/mybase_1?characterEncoding=utf8
root
rootroot
5
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);
}
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.class), 3);
System.out.println(user);
}
// 查询结果是一条记录的【 MapHandler】
@Test
public void select3() throws SQLException {
// 1.创建QueryRunner对象,传入连接池
QueryRunner qr = new QueryRunner(c3p0Util.getDataSource());
// 2.调用query方法
Map 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