DBUtils:是为了简化JDBC的快发而产生的开发工具包,是对JDBC的一种封装。
DBUtils是个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果集封装成JavaBean。 在使用DBUtils之前,应该注意一些问题:
1、DBUtils是JDBC的简单封装,可以和JDBC混合使用。 2、DBUtils对结果集自动封装为JavaBean是有着苛刻要求的:必须满足JavaBean的规范,其次Bean的getter与setter方法的名字与结果集的列名一一对应,而不要求JavaBean的私有成员与表结果集列名一一对应。 3、DBUtils可以将结果集封装为各种类型,主要有:Bean/List,Map/List/Map,数组/List<数组>,列/List<列>,这些类型。 4、DBUtils执行插入操作的时候,无法返回自增主键,这是一个很严重的问题,当然不能怪DBUtils,可以通过变通的方法来实现,比如在MySQL中,执行完了一个插入SQL后,接着执行SELECT LAST_INSERT_ID()语句,就可以获取到自增主键。 5、DBUtils的性能和JDBC性能是一样,测试过程中没发现性能损失,拥有了很高性能的同时,而不失JDBC的灵活性。 6、对于JavaBean的成员类型定义,有一条原则那就是:尽可能使用包装类型,而不要使用基本类型。如果数据库中的值为null,那么将会报错.
创建工程 day1_jdbc,导入相关jar包,然后 add to build path(文末有jar包下载地址)。
1. 首先需要进行初步测试 “连接数据库”,代码如下:
package day1_jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Test01 { public static void main(String args[]) { String driverClassName = "com.mysql.cj.jdbc.Driver"; String url="jdbc:mysql://localhost:3306/student?serverTimezone=UTC"; String userName = "root"; String password = "068835"; Connection conn = null; try { Class.forName(driverClassName); conn = DriverManager.getConnection(url, userName, password); System.out.println("获取数据库连接成功!"); Statement st = conn.createStatement(); ResultSet rs = st.executeQuery("select * from mine"); // mine 为表的名称 while (rs.next()) { System.out.print(rs.getInt("Sno")); System.out.print(rs.getString("Sname")); System.out.print(rs.getInt("Sage")); System.out.println(); } } catch (Exception e) { e.printStackTrace(); } } }结果如下图所示: 2. DBUtils的类 (1) QueryRunner Dbutils的核心类之一,它显著的简化了SQL查询。 它的方法有: update(Connection conn, String sql, Object[] params):被用来执行插入、更新或删除(DML)操作。 (2) 查询 ① ArrayHandler 将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值。 ② ArrayListHandler 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。 ③ BeanHandler 将结果集中第一条记录封装到一个指定的javaBean中。 ④ BeanListHandler 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中。 ⑤ ColumnListHandler 将结果集中指定的列的字段值,封装到一个List集合中。
3. 使用(对数据进行插入、更新、删除、查找等操作) 代码如下:
package day1_jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.DbUtils; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.ArrayHandler; import org.apache.commons.dbutils.handlers.ColumnListHandler; public class Test02 { public static void main(String args[]) { insert();//插入\ update();//更新 delete();//删除 select();//查找 } public static void insert() { Connection conn = connectDB(); // 获取数据库连接 QueryRunner runner = new QueryRunner();//QueryRunner是DBUtils的核心类之一,它显著的简化了SQL查询 String sql = "insert into mine(Sno,Sname,Sage) values(1800004,'刘二',18)"; int num; try { num = runner.update(conn,sql); System.out.println("插入了" + num + "组数据"); } catch(SQLException e) { e.printStackTrace(); } DbUtils.closeQuietly(conn); // 关闭数据库连接 } public static void update() { Connection con = connectDB(); QueryRunner runner = new QueryRunner(); String sql = "update mine set Sname = '王五1' where Sno = 1800000"; try { int num = runner.update(con,sql); System.out.println("更新了" + num + "组数据"); } catch(SQLException e) { e.printStackTrace(); } DbUtils.closeQuietly(con); // 关闭数据库连接 } public static void delete() { Connection con = connectDB(); QueryRunner runner = new QueryRunner(); String sql = "delete from mine where Sno = 1800005"; try { int num = runner.update(con,sql); System.out.println("删除了" + num + "组数据"); } catch(SQLException e) { System.out.println("无法找到该组数据,删除失败"); } DbUtils.closeQuietly(con); // 关闭数据库连接 } public static void select() { Connection con = connectDB(); try { QueryRunner qr = new QueryRunner(); String sql = "select Sno,Sname from mine where Sage = ? "; //注意sql语句中的筛选项(username,password)一定要包括下列list中的参数项(username) Object [] param = {18}; List<Object> list = qr.query(con,sql,new ColumnListHandler<Object>("Sname"),param); //若没有查询到则list.size()=0 for (Object o : list) { System.out.println(o + "\t"); } } catch(Exception e) { e.printStackTrace(); } DbUtils.closeQuietly(con); } public static Connection connectDB() { String driverClassName = "com.mysql.cj.jdbc.Driver"; String url="jdbc:mysql://localhost:3306/student?serverTimezone=UTC"; String userName = "root"; String password = "068835"; Connection conn = null; try { Class.forName(driverClassName); conn = DriverManager.getConnection(url, userName, password); System.out.println("\n获取数据库连接成功!"); } catch (Exception e) { e.printStackTrace(); } return conn; } }结果如图: 以上就是我对DBUtils介绍与使用的理解,如有不对地方恳请指正。
[注] commons-dbutils-1.7.jar下载地址:link1. mysql-connector-java-8.0.21.jar下载地址:link2.
