1、概述

  (1)如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils ;

  (2)DBUtils就是JDBC的简化开发工具包。需要项目导入commons-dbutils-1.6.jar才能够正常使用DBUtils工具。

  (3)commons-dbutils-1.6-bin.zip 链接:commons-dbutils-1.6-bin.zip 密码:r1z4 ;

  (4)DBUtils是java编程中的数据库操作实用工具,小巧简单实用;

  (5)DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码;

  (6)Dbutils三个核心功能介绍:

    ①QueryRunner中提供对sql语句操作的API

    ②ResultSetHandler接口,用于定义select操作后,怎样封装结果集;

    ③DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法。

2、QueryRunner核心类

  (1)update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作;

  (2)query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作。

3、QueryRunner实现添加、更新、删除操作

  (1)update(Connection conn, String sql, Object... params) ,用来完成表数据的增加、删除、更新操作;

  (2)添加

  1. import java.sql.Connection;
  2. import java.sql.SQLException;
  3.  
  4. import org.apache.commons.dbutils.QueryRunner;
  5.  
  6. public class TestDBUtils {
  7. public static void main(String[] args) {
  8. try {
  9. // 获取一个用来执行SQL语句的对象 QueryRunner
  10. QueryRunner qr = new QueryRunner();
  11.  
  12. String sql = "INSERT INTO sort(sname) VALUES(?)";
  13. Object[] params = { "电视机" };
  14. Connection conn = JDBCUtils.getConnection();
  15. int line = qr.update(conn, sql, params);// 用来完成表数据的增加、删除、更新操作
  16. // 结果集处理
  17. System.out.println("line = " + line);
  18.  
  19. } catch (SQLException e) {
  20. throw new RuntimeException(e);
  21. }
  22.  
  23. }
  24.  
  25. }

  (3)更新

  1. import java.sql.Connection;
  2. import java.sql.SQLException;
  3.  
  4. import org.apache.commons.dbutils.QueryRunner;
  5.  
  6. public class TestDBUtils {
  7. public static void main(String[] args) {
  8. try {
  9. // 获取一个用来执行SQL语句的对象 QueryRunner
  10. QueryRunner qr = new QueryRunner();
  11.  
  12. String sql = "UPDATE sort set sid=sid+1 WHERE sname=?";
  13. Object[] params = { "电视机" };
  14. Connection conn = JDBCUtils.getConnection();
  15. int line = qr.update(conn, sql, params);// 用来完成表数据的增加、删除、更新操作
  16. // 结果集处理
  17. System.out.println("line = " + line);
  18.  
  19. } catch (SQLException e) {
  20. throw new RuntimeException(e);
  21. }
  22.  
  23. }
  24.  
  25. }

  (4)删除

  1. import java.sql.Connection;
  2. import java.sql.SQLException;
  3.  
  4. import org.apache.commons.dbutils.QueryRunner;
  5.  
  6. public class TestDBUtils {
  7. public static void main(String[] args) {
  8. try {
  9. // 获取一个用来执行SQL语句的对象 QueryRunner
  10. QueryRunner qr = new QueryRunner();
  11.  
  12. String sql = "DELETE FROM sort WHERE sname=?";
  13. Object[] params = { "电视机" };
  14. Connection conn = JDBCUtils.getConnection();
  15. int line = qr.update(conn, sql, params);// 用来完成表数据的增加、删除、更新操作
  16. // 结果集处理
  17. System.out.println("line = " + line);
  18.  
  19. } catch (SQLException e) {
  20. throw new RuntimeException(e);
  21. }
  22.  
  23. }
  24.  
  25. }

4、QueryRunner实现查询操作

  (1)query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作;

  (2)ResultSetHandler结果集处理类

  

  (3)JavaBean

    JavaBean就是一个类,在开发中常用封装数据。具有如下特性:

    ①需要实现接口:java.io.Serializable ,通常实现接口这步骤省略了,不会影响程序;

    ②提供私有字段:private 类型 字段名;

    ③提供getter/setter方法;

    ④提供无参构造。

  1. public class Sort {
  2. private int sid;
  3. private String sname;
  4.  
  5. public Sort() {
  6. super();
  7. }
  8.  
  9. public int getSid() {
  10. return sid;
  11. }
  12.  
  13. public void setSid(int sid) {
  14. this.sid = sid;
  15. }
  16.  
  17. public String getSname() {
  18. return sname;
  19. }
  20.  
  21. public void setSname(String sname) {
  22. this.sname = sname;
  23. }
  24.  
  25. @Override
  26. public String toString() {// 该方法可以省略
  27. return "Sort[sid=" + sid + ",sname=" + sname + "]";
  28. }
  29. }

  (4)ArrayHandler与ArrayListHandler查询

    ①ArrayHandler:将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值。

  1. import java.sql.Connection;
  2. import java.sql.SQLException;
  3. import java.util.Arrays;
  4.  
  5. import org.apache.commons.dbutils.QueryRunner;
  6. import org.apache.commons.dbutils.handlers.ArrayHandler;
  7. import org.junit.Test;
  8.  
  9. public class ArrayHandlerDemo {
  10.  
  11. @Test
  12. public void method() {
  13. try {
  14. // 获取QueryRunner对象
  15. QueryRunner qr = new QueryRunner();
  16. // 执行SQL语句
  17. String sql = "SELECT * FROM sort";
  18. Object[] params = {};
  19. Connection conn = JDBCUtils.getConnection();
  20. Object[] objArray = qr.query(conn, sql, new ArrayHandler(), params);
  21. // 结果集的处理
  22. System.out.println(Arrays.toString(objArray));
  23.  
  24. conn.close();
  25. } catch (SQLException e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. }

1024x768

  运行结果:

  

  

    ②ArrayListHandler:将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。

  1. import java.sql.Connection;
  2. import java.sql.SQLException;
  3. import java.util.Arrays;
  4. import java.util.List;
  5.  
  6. import org.apache.commons.dbutils.QueryRunner;
  7. import org.apache.commons.dbutils.handlers.ArrayListHandler;
  8. import org.junit.Test;
  9.  
  10. public class ArrayListHandlerDemo {
  11. @Test
  12. public void method() {
  13. try {
  14. // 获取QueryRunner对象
  15. QueryRunner qr = new QueryRunner();
  16. // 执行SQL语句
  17. String sql = "SELECT * FROM sort WHERE sid>?";
  18. Object[] params = { 4 };
  19. Connection conn = JDBCUtils.getConnection();
  20. List<Object[]> list = qr.query(conn, sql, new ArrayListHandler(),
  21. params);
  22. // 结果集的处理
  23. for (Object[] objArray : list) {
  24. System.out.println(Arrays.toString(objArray));
  25. }
  26.  
  27. conn.close();
  28. } catch (SQLException e) {
  29. e.printStackTrace();
  30. }
  31. }
  32. }

  运行结果:

  

  

  (5)BeanHandler与BeanListHandler查询

    ①BeanHandler:将结果集中第一条记录封装到一个指定的javaBean中。

  1. import java.sql.Connection;
  2. import java.sql.SQLException;
  3.  
  4. import org.apache.commons.dbutils.QueryRunner;
  5. import org.apache.commons.dbutils.handlers.BeanHandler;
  6.  
  7. public class BeanHandlerDemo {
  8. public static void main(String[] args) {
  9.  
  10. try {
  11. // 获取QueryRunner
  12. QueryRunner qr = new QueryRunner();
  13. // 执行SQL语句
  14. String sql = "SELECT * FROM sort WHERE sname=?";
  15. Object[] params = { "冰箱" };
  16. Connection conn = JDBCUtils.getConnection();
  17. Sort s = qr.query(conn, sql, new BeanHandler<Sort>(Sort.class),
  18. params);
  19. // 结果集处理
  20. System.out.println(s);
  21.  
  22. conn.close();
  23. } catch (SQLException e) {
  24. throw new RuntimeException(e);
  25. }
  26.  
  27. }
  28. }

  运行结果:

  
  

    ②BeanListHandler:将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中。

  1. import java.sql.Connection;
  2. import java.sql.SQLException;
  3. import java.util.List;
  4.  
  5. import org.apache.commons.dbutils.QueryRunner;
  6. import org.apache.commons.dbutils.handlers.BeanListHandler;
  7. import org.junit.Test;
  8.  
  9. public class BeanListHandlerDemo {
  10. @Test
  11. public void method() {
  12. try {
  13. // 获取QueryRunner
  14. QueryRunner qr = new QueryRunner();
  15. // 执行SQL语句
  16. String sql = "SELECT * FROM Sort WHERE sid>?";
  17. Object[] params = { 4 };
  18. Connection conn = JDBCUtils.getConnection();
  19. List<Sort> list = qr.query(conn, sql, new BeanListHandler<Sort>(
  20. Sort.class), params);
  21. // 结果集处理
  22. for (Sort s : list) {
  23. System.out.println(s);
  24. }
  25.  
  26. conn.close();
  27. } catch (SQLException e) {
  28. throw new RuntimeException(e);
  29. }
  30. }
  31. }

  运行结果:

  

  

  温馨提示:使用DBUtils查询数据,如果使用ArrayListHandler等都能够返回正确值,<br>但使用BeanListHandler 和 BeanHandler则一直返回null,请检查保证实体类的属性名称必须要同数据库中的字段一模一样(区分大小写)。

  (6)ColumnListHandler与ScalarHandler查询

    ①ColumnListHandler:将结果集中指定的列的字段值,封装到一个List集合中。

  1. import java.sql.Connection;
  2. import java.sql.SQLException;
  3. import java.util.List;
  4.  
  5. import org.apache.commons.dbutils.QueryRunner;
  6. import org.apache.commons.dbutils.handlers.ColumnListHandler;
  7. import org.junit.Test;
  8.  
  9. public class ColumnListHandlerDemo {
  10. @Test
  11. public void method() {
  12. try {
  13. // 获取QueryRunner对象
  14. QueryRunner qr = new QueryRunner();
  15. // 执行SQL语句
  16. String sql = "SELECT sname FROM Sort WHERE sid>?";
  17. Object[] params = { 4 };
  18. Connection conn = JDBCUtils.getConnection();
  19. List<String> list = qr.query(conn, sql,
  20. new ColumnListHandler<String>(), params);
  21. // 结果集的处理
  22. for (String str : list) {
  23. System.out.println(str);
  24. }
  25.  
  26. conn.close();
  27. } catch (SQLException e) {
  28. e.printStackTrace();
  29. }
  30. }
  31. }

  运行结果:

  

  

    ②ScalarHandler:它是用于单数据。例如select count(*) from 表操作。

  1. import java.sql.Connection;
  2. import java.sql.SQLException;
  3.  
  4. import org.apache.commons.dbutils.QueryRunner;
  5. import org.apache.commons.dbutils.handlers.ScalarHandler;
  6. import org.junit.Test;
  7.  
  8. public class ScalarHandlerDemo {
  9. @Test
  10. public void method() {
  11. try {
  12. // 获取QueryRunner对象
  13. QueryRunner qr = new QueryRunner();
  14.  
  15. // 执行SQL语句
  16. String sql = "SELECT MAX(sid) FROM Sort";
  17. Object[] params = {};
  18. Connection conn = JDBCUtils.getConnection();
  19. Integer max = qr.query(conn, sql, new ScalarHandler<Integer>(),
  20. params);
  21. // 结果集的处理
  22. System.out.println("max=" + max);
  23.  
  24. conn.close();
  25. } catch (SQLException e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. }

  运行结果:

  

  

Normal
0

7.8 磅
0
2

false
false
false

EN-US
ZH-CN
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:宋体;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}

03015_DBUtils的更多相关文章

随机推荐

  1. hibernate ID生成策略配置

    1.Student.hbm.xml配置 <hibernate-mapping package="com.wxh.hibernate.model"> <class ...

  2. 大海教你学手游2015CocosLua第一季_00课程介绍

    话说大盘从5100直掉到3500点,千仅仅股票跌幅超过20%,跌跌不休.散户.证监会.做空机构開始斗气地主来了: 散户:叫地主 空头:抢地主,3分 证监会:pass 空头:压死 证监会:不要 散户:不 ...

  3. Android Stuido 好卡怎么办?不要急,兄弟来教你

    近期使用Android studio 开发app,编译的时候特别卡,常常卡死.我的机器 i3 + 8G,按道理来说流畅的跑个androidstudio还是绰绰有余的... 于是在各大论坛寻找解决方式, ...

  4. Codeforces 559B Equivalent Strings 等价串

    题意:给定两个等长串a,b.推断是否等价.等价的含义为:若长度为奇数,则必须是同样串.若长度是偶数,则将两串都均分成长度为原串一半的两个子串al,ar和bl,br,当中al和bl等价且ar和br等价, ...

  5. [AGC018 B] Sports Festival 解题报告

    题目链接:https://agc018.contest.atcoder.jp/tasks/agc018_b 题目: 题目大意: 有N个人参加M个体育项目,每个人对体育项目的喜爱程度有一个排名,A[i] ...

  6. es6 --- 功能

    标记的模板文字 1.模板文字!确实很棒.我们不再会这样做…. const concatenatedString = "I am the " + number + "per ...

  7. BZOJ 2049 LCT

    思路:LCT的基本操作 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm&g ...

  8. LIMIT语句解析及本章简单回顾(二十九)

    一.LIMIT 限制查询结果返回的数量 [LIMIT {[offset,] row_count | row_count OFFSET offset}] select * from user; 除了可以 ...

  9. VS Code(Visual Studio Code)

    这次推荐 VS Code,这是个跨平台.免费的代码编辑器,集成开发.调试.编译为一身.单成启动速度,资源占用,就已经赢了各大编辑器(什么 SB.N++之类).以前觉得 VS 2015 是宇宙最强编辑器 ...

  10. rails 开发随手记 8

    rails上传文件 无需gem 首先是model class DataFile < ActiveRecord::Base def initialize end def name @name en ...