本次博客带领大家学习ApacheDBUtils的使用。
public class Actor {
private Integer id;
private String name;
private String sex;
private Date borndate;
private String phone;
public Actor() {
}
public Actor(Integer id, String name, String sex, Date borndate, String phone) {
this.id = id;
this.name = name;
this.sex = sex;
this.borndate = borndate;
this.phone = phone;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBorndate() {
return borndate;
}
public void setBorndate(Date borndate) {
this.borndate = borndate;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "\nActor{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", borndate=" + borndate +
", phone='" + phone + '\'' +
'}';
}
}
public void testSelect1(){
System.out.println("使用ResultSet =封装查询:");
//1. 得到连接
Connection connection = null;
// 2.组织一个sql
String sql = "select * from actor";
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
ArrayList<Actor> list = new ArrayList<>();
//3.创建PrepareStatement对象
try {
connection = JDBCUtilsByDruid.getConnection();
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();
while(resultSet.next()){
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
String sex = resultSet.getString("sex");
Date borndate = resultSet.getDate("borndate");
String phone = resultSet.getString("phone");
//把得到的resultset的记录,封装到Actor对象,放入到list集合
list.add(new Actor(id,name,sex,borndate,phone));
//System.out.println(id+"\t"+name+"\t"+sex+"\t"+borndate+"\t"+phone);
}
System.out.println("集合中的数据"+list);
for (Actor actor : list){
System.out.println("id="+actor.getId()+"\t"+actor.getName());
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
//关闭资源
JDBCUtilsByDruid.close(null,preparedStatement,connection);
}
}
commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的封装,使用dbutils能极大简化jdbc编码的工作量。
QueryRunner类:该类封装了SQL的执行,是线程安全的。可以实现增、删、改、查、批处理的操作。
ResultSetHandler接口:该接口用于处理java.sql.ResultSet,将数据按要求转换为另一种形式。
ArrayHandler:把结果集合的第一行数据转换成对象数组。
ArrayListHandler:把结果集合的每一行数据转换成数组,再存放到List中。
BeanHandler:把结果集合的第一行数据封装到一个对应的JavaBean实例中。
BeanListHandler:把结果集合的每一行数据封装到一个对应的JavaBean实例中,再存放到List里。
ColumnListHandler:将结果集中的某一列的数据存放到List中。
keyedHandler(name):将结果集中的每行数据都封装到Map里,再把这些map再存到一个map里,其key为指定的key。
MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List。
public void testQueryMany() throws SQLException {
//1.得到连接 (druid)
Connection connection = JDBCUtilsByDruid.getConnection();
//2.使用 DBUtils 类和接口,先引入 DBUtils 相关的jar,加入到项目中
//3.创建 QueryRunner
QueryRunner queryRunner = new QueryRunner();
//4.就可以执行相关的方法,返回ArrayList结果集
String sql = "select * from actor where id >= ?";
//1.query 方法就是执行sql 语句,得到resultset ----封装到 --> ArrayList 集合中
//2.返回集合
//3.connection :连接
//4.sql:执行的sql语句
//5.new BeanListHandler<>(Actor.class):在将resultset -> Actor对象 ->封装到ArrayList
//6. 1 就是给sql语句中的?赋值,可以有多个值,因为是可变参数Object... params
//7.底层得到的resultset,会在query关闭,关闭PreparedStatement
List<Actor> list = queryRunner.query(connection, sql, new BeanListHandler<>(Actor.class), 1);
System.out.println("输出集合的信息:");
for (Actor actor : list){
System.out.print(actor);
}
//释放资源
JDBCUtilsByDruid.close(null,null,connection);
}
public void testQuerySingle() throws SQLException {
//1.得到连接 (druid)
Connection connection = JDBCUtilsByDruid.getConnection();
//2.使用 DBUtils 类和接口,先引入 DBUtils 相关的jar,加入到项目中
//3.创建 QueryRunner
QueryRunner queryRunner = new QueryRunner();
//4.就可以执行相关的方法,返回单个对象
String sql = "select * from actor where id = ?";
// 因为我们返回的单行记录<---> 单个对象,使用的Handler 是 BeanHandler
Actor actor = queryRunner.query(connection, sql, new BeanHandler<>(Actor.class), 4);
System.out.println(actor);
//释放资源
JDBCUtilsByDruid.close(null,null,connection);
}
public void testScalar() throws SQLException {
//1.得到连接 (druid)
Connection connection = JDBCUtilsByDruid.getConnection();
//2.使用 DBUtils 类和接口,先引入 DBUtils 相关的jar,加入到项目中
//3.创建 QueryRunner
QueryRunner queryRunner = new QueryRunner();
//4.就可以执行相关的方法,返回单行单列,返回的就是Object
String sql = "select name from actor where id = ?";
//因为返回的是一个对象,使用的handler 就是 ScalarHandler
Object query = queryRunner.query(connection, sql, new ScalarHandler<>(), 4);
System.out.println(query);
//释放资源
JDBCUtilsByDruid.close(null,null,connection);
}
public void testDML() throws SQLException {
//1.得到连接 (druid)
Connection connection = JDBCUtilsByDruid.getConnection();
//2.使用 DBUtils 类和接口,先引入 DBUtils 相关的jar,加入到项目中
//3.创建 QueryRunner
QueryRunner queryRunner = new QueryRunner();
//4.这里组织sql 完成 update,insert,delete
//String sql = "update actor set name = ? where id = ?";
//String sql = "insert into actor values(null,?,?,?,?)";
String sql = "delete from actor where id=?";
//1.执行dml操作是 queryRunner.update()
//2.返回值是受影响的行数
//int affectedRow = queryRunner.update(connection, sql, "林青霞","女","1960-10-10","90");
int affectedRow = queryRunner.update(connection, sql, 3);
System.out.println(affectedRow > 0 ? "执行成功" : "执行没有影响到表");
//释放资源
JDBCUtilsByDruid.close(null,null,connection);
}