简单介绍:
DBUtils是一个用来简化我们JDBC的编码工作量的一个工具。它可以在不影响数据库访问性能的情况下简化我们的代码编辑量。DBUtils的作用主要是:写数据,读数据,优化性能。
常用的类和对应的API:
QureyRunner类:SQL语句执行和封装结果集类
new QueryRunner(DataSource ds):从DataSource中获取连接,而不是从方法中添加连接参数
query(Conn,SQL,具体的封装类):用来执行查询语句的方法,这个具体的封装类可以是下面类中的任意一个
update(Conn,SQL,具体的封装类):用来执行数据的增删改数据操作的方法,参数与上面的方法相同
BeanHandler类:将单行结果封装进JavaBean类
new BeanHandler(JavaBean.class):参数是一个JavaBean的Class文件对象
BeanListHandler类:将多行数据封装进JavaBeanList类
new BeanListHandler<JavaBean>(JavaBean.class):有一个泛型和文件对象
ColumnListHandler类:将单行结果封装进集合中的类
new ColumnListHandler(”列名“):当参数是String类型的时候表示列名,当参数是int类型的时候表示第几列
ScalarHandler类:将单行单列也就是执行列的第一行数据封装进集合中的类
new ScalarHandler("列名"):当参数是String类型的时候表示列名,当参数是int类型的时候表示第几列
jar包下载:
DBUtils是Apache组织下的一个免费的工具包,所以可以在apache官网进行下载:
https://dlcdn.apache.org//commons/dbutils/binaries/commons-dbutils-1.7-bin.zip
代码实现:
前期准备:
数据库连接类:我们需要提前定义一个数据库连接类方便我们获取数据库连接
package DBUtiles;
import java.sql.Connection;
import java.sql.DriverManager;
public class MySQLConn {
public static Connection Conn() throws Exception {
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql:///test";
String username = "root";
String pass = "***";
Connection conn = DriverManager.getConnection(url, username, passwd);
return conn;
}
}
JavaBean:我们需要一个JavBean来存放我们的数据
package DBUtiles;
public class student {
private String id;
private String name;
private String passwd;
public student() {
}
public student(String id, String name, String passwd) {
this.id = id;
this.name = name;
this.passwd = passwd;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
}
数据库文件:我们需要提前在数据库中准备一些数据方便我们之后的查询:
在student表中有三个列,五行数据
DBUtils读取数据:
将数据存入JavaBean:
实现将数据存入到JavaBean中的过程是使用BeanHandler类来实现
代码实现:
package DBUtiles;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import java.sql.Connection;
public class DBUtils_demo {
public static void main(String[] args) throws Exception {
// 获取MySQL的连接
Connection conn = MySQLConn.Conn();
// 获取QueryRunner对象用来执行SQL语句和处理返回的结果集
QueryRunner q = new QueryRunner();
// 创建SQL语句
String SQL = "select * from student";
// 调用QueryRunner对象的query方法,传入参数,第一个参数是连接对象,第二个参数是SQL语句,第三个参数是处理结果集的具体类
// 因为我们使用的是将数据转存到JavaBean的方式,所以这里使用的是BeanHandler,参数是JavaBean的class文件对象
student query = q.query(conn,SQL, new BeanHandler<>(student.class));
// 上面的方法直接返回一个封装了数据的JavaBean对象,所以我们可以直接调用JavaBean的方法来获取数据
// 上面的方法只是封装了第一条数据,要想获取所有的数据,需要使用其他类
String username = query.getName();
String passwd = query.getPasswd();
String id = query.getId();
System.out.println(id+"/"+username+"/"+passwd);
}
}
将数据存入JavaBeanList集合:
package DBUtiles;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.Connection;
import java.util.ArrayList;
public class DBUtils_demo {
public static void main(String[] args) throws Exception {
// 获取MySQL的连接
Connection conn = MySQLConn.Conn();
// 获取QueryRunner对象用来执行SQL语句和处理返回的结果集
QueryRunner q = new QueryRunner();
// 创建SQL语句
String SQL = "select * from student";
// 调用QueryRunner对象的query方法,传入参数,第一个参数是连接对象,第二个参数是SQL语句,第三个参数是处理结果集的具体类
// 如果我们要将所有的数据都存入JavaBean中,就需要使用BeanListHandler类,将每一行JavaBean对象存入一个集合中
// 首先就是创建一个JavaBean对象,泛型的类型是student.也就是我们的JavaBean对象
BeanListHandler<student> blh = new BeanListHandler<>(student.class);
// 然后开始调用query方法执行SQL语句并自动将结果集封装在JavaBean集合中
ArrayList<student> query = (ArrayList<student>) q.query(conn,SQL, blh);
// 遍历集合,获取每一个JavaBean中的数据
for(int i = 0;i<query.size();i++){
student s = query.get(i);
System.out.println(s.getId()+"/"+s.getName()+"/"+s.getPasswd());
}
}
}
将数据存入List集合: 使用ColumnListHandler类
使用ColumnListHandler类的时候,可以指定一个参数,也就是执行获取数据库中的某一列的数据。如果不进行指定,默认会获取第一列的参数
代码实现:
package DBUtiles;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import java.sql.Connection;
public class DBUtils_demo {
public static void main(String[] args) throws Exception {
// 获取数据库连接
Connection conn = MySQLConn.Conn();
// 获取QueryRunner对象
QueryRunner qr = new QueryRunner();
// 编写SQL语句
String SQL = "select * from student";
// 执行SQL语句并返回一个List集合,ColumnListHandler设置泛型为String,并传入一个参数,这个参数指的是数据库中的列名
// 执行完之后会返回一个List集合,可以直接进行遍历
for (String s : qr.query(conn, SQL, new ColumnListHandler<String>("name"))) {
System.out.println(s);
}
}
}
获取单行单列的数据:使用ScalarHandler类
package DBUtiles;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import java.sql.Connection;
public class DBUtils_demo {
public static void main(String[] args) throws Exception {
// 获取数据库连接
Connection conn = MySQLConn.Conn();
// 获取QueryRunner对象
QueryRunner qr = new QueryRunner();
// 编写SQL语句
String SQL = "select * from student";
// 使用ScalarHandler获取单行单列的数据,也就是获取执行列的第一行数据
String name = qr.query(conn, SQL, new ScalarHandler<String>("name"));
System.out.println(name);
}
}
DBUtils写入数据:
写入数据的过程非常的简单,只需要执行不同的方法即可
package DBUtiles;
import org.apache.commons.dbutils.QueryRunner;
import java.sql.Connection;
public class DBUtils_demo {
public static void main(String[] args) throws Exception {
// 获取MySQL连接
Connection conn = MySQLConn.Conn();
// 编写SQL语句
String SQL = "insert into student values(6,'老八','123456')";
// 创建QueryRunner对象
QueryRunner q = new QueryRunner();
// 执行修改数据的方法,使用update方法,第一个参数是连接对象,第二个参数是SQL语句
// 返回值是被影响的行数
int update = q.update(conn,SQL);
if(update>=0){
System.out.println("操作成功!");
}
}
}
DBUtils修改数据:
修改数据的方法也非常的简单,基本跟上面增加数据的方法是一样的
代码实现:
package DBUtiles;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import java.sql.Connection;
public class DBUtils_demo {
public static void main(String[] args) throws Exception {
// 获取数据库连接
Connection conn = MySQLConn.Conn();
// 获取QueryRunner对象
QueryRunner qr = new QueryRunner();
// 编写SQL语句
String SQL = "update student set name = '张三' where id = 2";
int update = qr.update(conn, SQL);
if(update >= 0){
System.out.println("操作成功!");
}
}
}
DBUtils删除数据:
删除数据的方法也非常的简单,基本跟上面的方法是一样的
代码实现:
package DBUtiles;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import java.sql.Connection;
public class DBUtils_demo {
public static void main(String[] args) throws Exception {
// 获取数据库连接
Connection conn = MySQLConn.Conn();
// 获取QueryRunner对象
QueryRunner qr = new QueryRunner();
// 编写SQL语句
String SQL = "delete from student where id = 1";
int update = qr.update(conn, SQL);
if(update >= 0){
System.out.println("操作成功!");
}
}
}