1 DBUtils
1.1 介绍
DBUtils:Apache commons 组件中的一个成员,是JDBC的简化开发工具包,需要导入 commons-dbutils-1.6.jar 包。
三个核心功能:
- QueryRunner中提供对sql语句操作的API。
- ResultSetHandler接口,用于定义select操作后,怎样封装结果集。
- DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法。
1.2 QueryRunner实现添加、更新、删除操作
1)创建一个获取数据库连接的工具类
public class JDBCUtils {
public static final String DRIVERNAME = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://localhost:3306/my_db";
public static final String USER = "root";
public static final String PASSWORD = "rootroot";
static {
try {
// 1 注册驱动
Class.forName(DRIVERNAME);
} catch (ClassNotFoundException e) {
System.out.println("数据库驱动注册失败!");
}
}
// 提供获取连接的方法
public static Connection getConn() throws Exception {
// 2 获得连接
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
// 返回连接
return conn;
}
}
2)插入数据
public static void main(String[] args) throws Exception {
// 1 获取一个用来执行SQL语句的对象
QueryRunner queryRunner=new QueryRunner();
String sql="insert into zhangwu(name,money,parent) values(?,?,?)";
Object[] params= {"股票收入",5500,"收入"};
Connection connection=JDBCUtils.getConn();
// 2 对数据库进行操作
int line=queryRunner.update(connection, sql, params);
// 3 结果集处理
System.out.println("line= "+line);
}
3)更新数据
public static void main(String[] args) throws Exception {
// 1 获取一个用来执行SQL语句的对象
QueryRunner queryRunner=new QueryRunner();
String sql="update zhangwu set money = money+1000 where name=?";
Object[] params= {"股票收入"};
Connection connection=JDBCUtils.getConn();
// 2 对数据库进行操作
int line=queryRunner.update(connection, sql, params);
// 3 结果集处理
System.out.println("line= "+line);
}
4)删除数据
public static void main(String[] args) throws Exception {
// 1 获取一个用来执行SQL语句的对象
QueryRunner queryRunner=new QueryRunner();
String sql="delete from zhangwu where name=?";
Object[] params= {"股票收入"};
Connection connection=JDBCUtils.getConn();
// 2 对数据库进行操作
int line=queryRunner.update(connection, sql, params);
// 3 结果集处理
System.out.println("line= "+line);
}
1.3 QueryRunner实现查询操作
1)JavaBean
JavaBean就是一个类,在开发中常用来封装数据。
特性:
- 需要实现接口:java.io.Serializable ,通常实现接口这步骤省略了,不会影响程序。
- 提供私有字段:private 类型 字段名;
- 提供getter/setter方法
- 提供无参构造
public class ZhangWu {
private int id;
private String name;
private double money;
private String parent;
public ZhangWu() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public String getParent() {
return parent;
}
public void setParent(String parent) {
this.parent = parent;
}
@Override
public String toString() {
return "ZhangWu [id=" + id + ",name=" + name + ",money=" + money + ",parent=" + parent + "]";
}
}
1.3.1 ArrayHandler & ArrayListHandler
1)ArrayHandler:将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值。
public static void main(String[] args) throws Exception {
// 1 获取一个用来执行SQL语句的对象
QueryRunner queryRunner=new QueryRunner();
// 2 SQL语句
String sql="select * from zhangwu";
Object[] params= {};
// 3 获取数据库连接
Connection connection=JDBCUtils.getConn();
// 4 对数据库进行操作
Object[] objArray=queryRunner.query(connection, sql, new ArrayHandler(),params);
// 5 结果集处理
System.out.println(Arrays.toString(objArray));
// 6 关闭资源
connection.close();
}
2)ArrayListHandler:将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
public static void main(String[] args) throws Exception {
// 1 获取一个用来执行SQL语句的对象
QueryRunner queryRunner = new QueryRunner();
// 2 SQL语句
String sql = "select * from zhangwu where money>?";
Object[] params = { 2000 };
// 3 获取数据库连接
Connection connection = JDBCUtils.getConn();
// 4 对数据库进行操作
java.util.List<Object[]> list = queryRunner.query(connection, sql, new ArrayListHandler(), params);
// 5 结果集处理
for (Object[] objArray : list) {
System.out.println(Arrays.toString(objArray));
}
// 6 关闭资源
connection.close();
}
1.3.2 BeanHandler & BeanListHandler
1)BeanHandler :将结果集中第一条记录封装到一个指定的JavaBean中。
public static void main(String[] args) throws Exception {
// 1 获取一个用来执行SQL语句的对象
QueryRunner queryRunner = new QueryRunner();
// 2 SQL语句
String sql = "select * from zhangwu";
Object[] params = {};
// 3 获取数据库连接
Connection connection = JDBCUtils.getConn();
// 4 对数据库进行操作
ZhangWu zWu=queryRunner.query(connection, sql, new BeanHandler<ZhangWu>(ZhangWu.class),params);
// 5 结果集处理
System.out.println(zWu);
// 6 关闭资源
connection.close();
}
2)BeanListHandler:将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中。
public static void main(String[] args) throws Exception {
// 1 获取一个用来执行SQL语句的对象
QueryRunner queryRunner = new QueryRunner();
// 2 SQL语句
String sql = "select * from zhangwu";
Object[] params = {};
// 3 获取数据库连接
Connection connection = JDBCUtils.getConn();
// 4 对数据库进行操作
java.util.List<ZhangWu> list=queryRunner.query(connection, sql, new BeanListHandler<ZhangWu>(ZhangWu.class),params);
// 5 结果集处理
for (ZhangWu zhangWu : list) {
System.out.println(zhangWu);
}
// 6 关闭资源
connection.close();
}
1.3.3 ColumnListHandler & ScalarHandler
1)ColumnListHandler:将结果集中指定的列的字段值,封装到一个List集合中。
public static void main(String[] args) throws Exception {
// 1 获取一个用来执行SQL语句的对象
QueryRunner queryRunner = new QueryRunner();
// 2 SQL语句
String sql = "select name from zhangwu";
Object[] params = {};
// 3 获取数据库连接
Connection connection = JDBCUtils.getConn();
// 4 对数据库进行操作
java.util.List<String> list=queryRunner.query(connection, sql, new ColumnListHandler<String>(),params);
// 5 结果集处理
for (String string : list) {
System.out.println(string);
}
// 6 关闭资源
connection.close();
}
2)ScalarHandler:它是用于单数据。例如select count(*) from 表操作。
public static void main(String[] args) throws Exception {
// 1 获取一个用来执行SQL语句的对象
QueryRunner queryRunner = new QueryRunner();
// 2 SQL语句
String sql = "select MAX(money) from zhangwu";
Object[] params = {};
// 3 获取数据库连接
Connection connection = JDBCUtils.getConn();
// 4 对数据库进行操作
Double dd=queryRunner.query(connection, sql, new ScalarHandler<Double>(),params);
// 5 结果集处理
System.out.println(dd);
// 6 关闭资源
connection.close();
}