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)添加

 import java.sql.Connection;
import java.sql.SQLException; import org.apache.commons.dbutils.QueryRunner; public class TestDBUtils {
public static void main(String[] args) {
try {
// 获取一个用来执行SQL语句的对象 QueryRunner
QueryRunner qr = new QueryRunner(); String sql = "INSERT INTO sort(sname) VALUES(?)";
Object[] params = { "电视机" };
Connection conn = JDBCUtils.getConnection();
int line = qr.update(conn, sql, params);// 用来完成表数据的增加、删除、更新操作
// 结果集处理
System.out.println("line = " + line); } catch (SQLException e) {
throw new RuntimeException(e);
} } }

  (3)更新

 import java.sql.Connection;
import java.sql.SQLException; import org.apache.commons.dbutils.QueryRunner; public class TestDBUtils {
public static void main(String[] args) {
try {
// 获取一个用来执行SQL语句的对象 QueryRunner
QueryRunner qr = new QueryRunner(); String sql = "UPDATE sort set sid=sid+1 WHERE sname=?";
Object[] params = { "电视机" };
Connection conn = JDBCUtils.getConnection();
int line = qr.update(conn, sql, params);// 用来完成表数据的增加、删除、更新操作
// 结果集处理
System.out.println("line = " + line); } catch (SQLException e) {
throw new RuntimeException(e);
} } }

  (4)删除

 import java.sql.Connection;
import java.sql.SQLException; import org.apache.commons.dbutils.QueryRunner; public class TestDBUtils {
public static void main(String[] args) {
try {
// 获取一个用来执行SQL语句的对象 QueryRunner
QueryRunner qr = new QueryRunner(); String sql = "DELETE FROM sort WHERE sname=?";
Object[] params = { "电视机" };
Connection conn = JDBCUtils.getConnection();
int line = qr.update(conn, sql, params);// 用来完成表数据的增加、删除、更新操作
// 结果集处理
System.out.println("line = " + line); } catch (SQLException e) {
throw new RuntimeException(e);
} } }

4、QueryRunner实现查询操作

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

  (2)ResultSetHandler结果集处理类

  

  (3)JavaBean

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

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

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

    ③提供getter/setter方法;

    ④提供无参构造。

 public class Sort {
private int sid;
private String sname; public Sort() {
super();
} public int getSid() {
return sid;
} public void setSid(int sid) {
this.sid = sid;
} public String getSname() {
return sname;
} public void setSname(String sname) {
this.sname = sname;
} @Override
public String toString() {// 该方法可以省略
return "Sort[sid=" + sid + ",sname=" + sname + "]";
}
}

  (4)ArrayHandler与ArrayListHandler查询

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

 import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.junit.Test; public class ArrayHandlerDemo { @Test
public void method() {
try {
// 获取QueryRunner对象
QueryRunner qr = new QueryRunner();
// 执行SQL语句
String sql = "SELECT * FROM sort";
Object[] params = {};
Connection conn = JDBCUtils.getConnection();
Object[] objArray = qr.query(conn, sql, new ArrayHandler(), params);
// 结果集的处理
System.out.println(Arrays.toString(objArray)); conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

1024x768

  运行结果:

  

  

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

 import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.junit.Test; public class ArrayListHandlerDemo {
@Test
public void method() {
try {
// 获取QueryRunner对象
QueryRunner qr = new QueryRunner();
// 执行SQL语句
String sql = "SELECT * FROM sort WHERE sid>?";
Object[] params = { 4 };
Connection conn = JDBCUtils.getConnection();
List<Object[]> list = qr.query(conn, sql, new ArrayListHandler(),
params);
// 结果集的处理
for (Object[] objArray : list) {
System.out.println(Arrays.toString(objArray));
} conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

  运行结果:

  

  

  (5)BeanHandler与BeanListHandler查询

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

 import java.sql.Connection;
import java.sql.SQLException; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler; public class BeanHandlerDemo {
public static void main(String[] args) { try {
// 获取QueryRunner
QueryRunner qr = new QueryRunner();
// 执行SQL语句
String sql = "SELECT * FROM sort WHERE sname=?";
Object[] params = { "冰箱" };
Connection conn = JDBCUtils.getConnection();
Sort s = qr.query(conn, sql, new BeanHandler<Sort>(Sort.class),
params);
// 结果集处理
System.out.println(s); conn.close();
} catch (SQLException e) {
throw new RuntimeException(e);
} }
}

  运行结果:

  
  

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

 import java.sql.Connection;
import java.sql.SQLException;
import java.util.List; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.Test; public class BeanListHandlerDemo {
@Test
public void method() {
try {
// 获取QueryRunner
QueryRunner qr = new QueryRunner();
// 执行SQL语句
String sql = "SELECT * FROM Sort WHERE sid>?";
Object[] params = { 4 };
Connection conn = JDBCUtils.getConnection();
List<Sort> list = qr.query(conn, sql, new BeanListHandler<Sort>(
Sort.class), params);
// 结果集处理
for (Sort s : list) {
System.out.println(s);
} conn.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}

  运行结果:

  

  

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

  (6)ColumnListHandler与ScalarHandler查询

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

 import java.sql.Connection;
import java.sql.SQLException;
import java.util.List; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.junit.Test; public class ColumnListHandlerDemo {
@Test
public void method() {
try {
// 获取QueryRunner对象
QueryRunner qr = new QueryRunner();
// 执行SQL语句
String sql = "SELECT sname FROM Sort WHERE sid>?";
Object[] params = { 4 };
Connection conn = JDBCUtils.getConnection();
List<String> list = qr.query(conn, sql,
new ColumnListHandler<String>(), params);
// 结果集的处理
for (String str : list) {
System.out.println(str);
} conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

  运行结果:

  

  

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

 import java.sql.Connection;
import java.sql.SQLException; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test; public class ScalarHandlerDemo {
@Test
public void method() {
try {
// 获取QueryRunner对象
QueryRunner qr = new QueryRunner(); // 执行SQL语句
String sql = "SELECT MAX(sid) FROM Sort";
Object[] params = {};
Connection conn = JDBCUtils.getConnection();
Integer max = qr.query(conn, sql, new ScalarHandler<Integer>(),
params);
// 结果集的处理
System.out.println("max=" + max); conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

  运行结果:

  

  

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. Django Admin site 显示问题

    Django Admin site 显示问题 今天配置了一下Django admin site,可是admin site的显示有一些问题,当我打开源码.訪问里面的admin 的css 文件时候,htt ...

  2. Vue小技巧,如何导入普通JS文件

    最近在开发一个展示3D模型的WEB程序,在工程中使用了VUE和ThreeJS库.Three.js本身是支持CommonJS的,但我们还用到了OBJLoader模块,此模块不支持CommonJS,改成C ...

  3. 83.导入项目时,用npm install安装module

    npm install 正因为有了npm,我们只要一行命令,就能安装别人写好的模块 .

  4. Boom

    紧急事件!战场内被敌军埋放了n枚炸弹! 我军情报部门通过技术手段,掌握了这些炸弹的信息.这些炸弹很特殊,每枚炸弹的波及区域是一个矩形.第i枚炸弹的波及区域是以点(xi1,yi1)为左下角,点(xi2, ...

  5. DNA Sequence POJ - 2778 AC 自动机 矩阵乘法

    定义重载运算的时候一定要将矩阵初始化,因为这个调了一上午...... Code: #include<cstdio> #include<algorithm> #include&l ...

  6. 装了ubuntu后笔记本电脑的无线网卡用不了,怎么设置?

    百度经验的一篇文章 http://jingyan.baidu.com/article/ca2d939dd4f1b4eb6c31ce09.html 点击右上角的齿轮,选择“系统设置”   点击“软件和更 ...

  7. vsftp迁移记录笔记

     由于之前的服务器用的window下的ftp安全性和稳定性都不好,所以我们才把ftp迁移到linux环境下 vsftp概述: vsftpd 它可以运行在多平台系统上面,是一个完全免费的.开放源代码的f ...

  8. echarts 初始化失败问题。

    dom 实例容器,一般是一个具有高宽的div元素. 注:如果div是隐藏的,ECharts 可能会获取不到div的高宽导致初始化失败,这时候可以明确指定div的style.width和style.he ...

  9. P2420 让我们异或吧(树链剖分)

    题目描述 异或是一种神奇的运算,大部分人把它总结成不进位加法. 在生活中-xor运算也很常见.比如,对于一个问题的回答,是为1,否为0.那么: (A是否是男生 )xor( B是否是男生)=A和B是否能 ...

  10. UVALive 2659 数独 DLX模板

    建图: 从1到16枚举所有的行.列上放的数. 代码: #include <iostream> #include <cstdio> #include <cstring> ...