开源框架:DBUtils使用详解

一、先熟悉DBUtils的API:

  •  简介:DbUtils是一个为简化JDBC操作的小类库。

(一)整个dbutils总共才3个包:

1、包org.apache.commons.dbutils   

接口摘要

ResultSetHandler    将ResultSet转换为别的对象的工具。

RowProcessor        将ResultSet行转换为别的对象的工具。
类摘要

BasicRowProcessor   RowProcessor接口的基本实现类。

BeanProcessor       BeanProcessor匹配列明到Bean属性名,并转换结果集列到Bean对象的属性中。

DbUtils             一个JDBC辅助工具集合。

ProxyFactory        产生JDBC接口的代理实现。

QueryLoader         属性文件加载器,主要用于加载属性文件中的 SQL 到内存中。

QueryRunner         使用可插拔的策略执行SQL查询并处理结果集。

ResultSetIterator   包装结果集为一个迭代器。

2、包org.apache.commons.dbutils.handlers

ResultSetHandler接口的实现类
类摘要

AbstractListHandler 将ResultSet转为List的抽象类
ArrayHandler 将ResultSet转为一个Object[]的ResultSetHandler实现类
ArrayListHandler 将ResultSet转换为List<Object[]>的ResultSetHandler实现类
BeanHandler 将ResultSet行转换为一个JavaBean的ResultSetHandler实现类
BeanListHandler 将ResultSet转换为List<JavaBean>的ResultSetHandler实现类
ColumnListHandler 将ResultSet的一个列转换为List<Object>的ResultSetHandler实现类
KeyedHandler 将ResultSet转换为Map<Map>的ResultSetHandler实现类
MapHandler 将ResultSet的首行转换为一个Map的ResultSetHandler实现类
MapListHandler 将ResultSet转换为List<Map>的ResultSetHandler实现类
ScalarHandler 将ResultSet的一个列到一个对象。
3、包org.apache.commons.dbutils.wrappers 
 
添加java.sql类中功能包装类。
类摘要
SqlNullCheckedResultSet  在每个getXXX方法上检查SQL NULL值的ResultSet包装类。
StringTrimmedResultSet    取出结果集中字符串左右空格的ResultSet包装类。


(二)使用DBUtils

其实只是使用的话,只看两个类(DbUtils 和QueryRunner)和一个接口(ResultSethandler)就可以了。

1,DbUtils

DbUtils是一个为做一些诸如关闭连接、装载JDBC驱动程序之类的常规工作提供有用方法的类,它里面所有的方法都是静态的。

这个类里的重要方法有:
close():

DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,
如果不是的话,它们就关闭连接、声明和结果集(ResultSet)。
CloseQuietly:
CloseQuietly这一方法不仅能在连接、声明或者结果集(ResultSet)为NULL情况下避免关闭,
还能隐藏一些在程序中抛出的SQLEeception。如果你不想捕捉这些异常的话,这对你是非常有用的。
在重载CloseQuietly方法时,特别有用的一个方法是closeQuietly(Connection conn,Statement stmt,ResultSet rs),
这是因为在大多数情况下,连接、声明和结果集(ResultSet)是你要用的三样东西,而且在最后的块你必须关闭它们。
使用这一方法,你最后的块就可以只需要调用这一方法即可。
CommitAndCloseQuietly(Connection conn):
这一方法用来提交连接,然后关闭连接,并且在关闭连接时不向上抛出在关闭时发生的一些SQL异常。
LoadDriver(String driveClassName):这一方法装载并注册JDBC驱动程序,如果成功就返回TRUE。
使用这种方法,你不需要去捕捉这个异常ClassNotFoundException。使用loadDrive方法,编码就变得更容易理解,
你也就得到了一个很好的Boolean返回值,这个返回值会告诉你驱动类是不是已经加载成功了。

2,ResultSetHandler

这一接口执行处理一个jaca.sql.ResultSet,将数据转变并处理为任何一种形式,这样有益于其应用而且使用起来更容易。

这一组件提供了ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, MapHandler, MapListHandler, and ScalarHandler等执行程序。

ResultSetHandler接口提供了一个单独的方法:Object handle (java.sql.ResultSet .rs)。

因此任何ResultSetHandler 的执行需要一个结果集(ResultSet)作为参数传入,然后才能处理这个结果集,再返回一个对象。

因为返回类型是java.lang.Object,所以除了不能返回一个原始的Java类型之外,其它的返回类型并没有什么限制。

如果你发现这七个执行程序中没有任何一个提供了你想要的服务,你可以自己写执行程序并使用它。

3,QreryRunner
这个类使执行SQL查询简单化了,它与ResultSetHandler串联在一起有效地履行着一些平常的任务,它能够大大减少你所要写的编码。
QueryRunner类提供了两个构造器:其中一个是一个空构造器,另一个则拿一个 javax.sql.DataSource 来作为参数。
因此,在你不用为一个方法提供一个数据库连接来作为参数的情况下,提供给构造器的数据源(DataSource) 被用来获得一个新的连接并将继续进行下去。
这一类中的重要方法包括以下这些:
query(Connection conn, String sql, Object[] params, ResultSetHandler rsh):
这一方法执行一个选择查询,在这个查询中,对象阵列的值被用来作为查询的置换参数。
这一方法内在地处理PreparedStatement 和ResultSet  的创建和关闭。
ResultSetHandler对把从 ResultSet得来的数据转变成一个更容易的或是应用程序特定的格式来使用。
query(String sql, Object[] params, ResultSetHandler rsh):
这几乎与第一种方法一样;唯一的不同在于它不将数据库连接提供给方法,
并且它是从提供给构造器的数据源(DataSource) 或使用的setDAtaSource 方法中重新获得的。
query(Connection conn, String sql, ResultSetHandler rsh):
这执行一个不要参数的选择查询。
update(Connection conn, String sql, Object[] params):
这一方法被用来执行一个插入、更新或删除操作。对象阵列为声明保存着置换参数。

到此为止,说明工作就差不多了,下面就实战一下,进入DBUtils使用详解二。

4、使用遵从以下步骤:

1.加载JDBC驱动程序类,并用DriverManager来得到一个数据库连接conn。

2.实例化 QueryRunner,得到实例化对象qRunner。

3. qRunner.update()方法,执行增改删的sql命令,

qRunner.query()方法,得到结果集。

5,实战

1,连接类ConnectDb:import java.sql.DriverManager;

 1  import java.sql.SQLException;
 2 import java.sql.Connection;
 3
 4 public class ConnectDb {
 5     private static String driveClassName = "com.mysql.jdbc.Driver";
 6     private static String url = "jdbc:mysql://192.168.1.161:3306/test?useUnicode=true&characterEncoding=utf8";
 7
 8     private static String user = "root";
 9     private static String password = "e-playnow";
10
11     public static Connection Connect(){
12         Connection conn = null;
13
14         //load driver
15         try {
16             Class.forName(driveClassName);
17         } catch (ClassNotFoundException  e) {
18             System.out.println("load driver failed!");
19             e.printStackTrace();
20         }
21
22         //connect db
23         try {
24             conn = DriverManager.getConnection(url, user, password);
25         } catch (SQLException e) {
26             System.out.println("connect failed!");
27             e.printStackTrace();
28         }
29
30         return conn;
31     }
32 } 

2、数据库表

1  CREATE TABLE `user` (
2   `id` int(11) NOT NULL auto_increment,
3   `name` varchar(50) NOT NULL,
4   `age` tinyint(10) NOT NULL,
5   PRIMARY KEY  (`id`)
6 ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

3、Bean

 1  package Beans;
 2
 3 public class UserBean {
 4     private int id;
 5     private String name;
 6     private int age;
 7
 8     public int getId() {
 9         return id;
10     }
11     public void setId(int id) {
12         this.id = id;
13     }
14     public String getName() {
15         return name;
16     }
17     public void setName(String name) {
18         this.name = name;
19     }
20     public int getAge() {
21         return age;
22     }
23     public void setAge(int age) {
24         this.age = age;
25     }
26 } 

4、Demo

 1  import java.sql.Connection;
 2 import java.sql.SQLException;
 3 import java.util.List;
 4 import org.apache.commons.dbutils.DbUtils;
 5 import org.apache.commons.dbutils.QueryRunner;
 6 import org.apache.commons.dbutils.handlers.BeanListHandler;
 7 import Beans.UserBean;
 8
 9 public class main {
10
11     public static void main(String[] args) throws SQLException {
12         insert_test();
13         del_test();
14     }
15
16     static void insert_test() throws SQLException{
17         Connection conn = ConnectDb.Connect();
18
19         //创建SQL执行工具
20         QueryRunner qRunner = new QueryRunner();
21
22         //执行SQL插入
23         int n = qRunner.update(conn, "insert into user(name,age) values(‘xxx‘,22)");
24         System.out.println("成功插入" + n + "条数据!");
25
26         //关闭数据库连接
27         DbUtils.closeQuietly(conn);
28     }
29
30     static void select_test() throws SQLException{
31         Connection conn = ConnectDb.Connect();
32
33         //创建SQL执行工具
34         QueryRunner qRunner = new QueryRunner();
35
36         @SuppressWarnings("unchecked")
37         List<UserBean> list = (List<UserBean>) qRunner.query(conn, "select id,name,age from user", new BeanListHandler(UserBean.class));
38         //输出查询结果
39         for (UserBean user : list) {
40                 System.out.println(user.getAge());
41         }
42
43         //关闭数据库连接
44         DbUtils.closeQuietly(conn);
45     }
46
47     static void update_test() throws SQLException{
48         Connection conn = ConnectDb.Connect();
49
50         //创建SQL执行工具
51         QueryRunner qRunner = new QueryRunner();
52         //执行SQL插入
53         int n = qRunner.update(conn, "update user set name = ‘xxx‘,age=28");
54         System.out.println("成功更新" + n + "条数据!");
55
56         //关闭数据库连接
57         DbUtils.closeQuietly(conn);
58     }
59
60     static void del_test() throws SQLException{
61         Connection conn = ConnectDb.Connect();
62
63         //创建SQL执行工具
64         QueryRunner qRunner = new QueryRunner();
65         //执行SQL插入
66         int n = qRunner.update(conn, "DELETE from user WHERE name=‘xxx‘;");
67         System.out.println("删除成功" + n + "条数据!");
68
69         //关闭数据库连接
70         DbUtils.closeQuietly(conn);
71     }
72 } 

原文地址:https://www.cnblogs.com/meiliguo/p/9097026.html

时间: 2024-10-23 15:56:01

开源框架:DBUtils使用详解的相关文章

Android第三方开源框架之SlidingMenu详解 [转载]

SlidingMenu简介:       SlidingMenu的是一种比较新的设置界面或配置界面效果,在主界面左滑或者右滑出现设置界面,能方便的进行各种操作.目前有大量的应用都在使用这一效果.如Evernote.Google+.Foursquare等,国内的豌豆夹,人人,360手机助手等都使用SlidingMenu的界面方案. 开源框架下载地址,集成了另一个开源项目ActionBarSherlock:点击下载.              注意: SlidingMenu依赖于另一个开源项目Act

Spring MVC 框架搭建及详解

一.Spring MVC环境搭建:(Spring 2.5.6 + Hibernate 3.2.0) 1. jar包引入 Spring 2.5.6:spring.jar.spring-webmvc.jar.commons-logging.jar.cglib-nodep-2.1_3.jar Hibernate 3.6.8:hibernate3.jar.hibernate-jpa-2.0-api-1.0.1.Final.jar.antlr-2.7.6.jar.commons-collections-3

SSH框架--struts深入详解(一)

学习了struts,但是对于它的由来,以及为什么使用action和struts.xml的方式而不采用以前的servlet方式,有些疑问,到底之前的方式有什么弊端,struts又给我们带来了什么便利? 下面一一为大家解答! struts的由来: 随着JSP与Servlet 技术大量应用于以Web为基础的应用程序,为了提升Web 应用程序可维护性与重复使用性,Java开发人员提出了一些较佳的开发模式.比较常见的两种JSP应用架构分别为Model1 与Model 2.详情参见(JAVA学习篇--JAV

SSH框架的整合详解

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> SSH框架的整合详解 - super_YC的博客 - 博客频道 - CSDN.NET super_YC的博客 记录我生活的一点一滴!我很开心拥有这样一个自己心事的笔记本 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯]流畅的P

java的集合框架最全详解

java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法. 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类).所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework). Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这

Java的集合框架最全详解(图)

纯个人整理,如有错误请指正. java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法. 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类).所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework). Java程序员在具体应用时,不必考虑数据

spring框架 AOP核心详解

AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子. 一 AOP的基本概念 (1)Aspect(切面):通常是一个类,里面可以定义切入点和通知 (2)JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用 (3)Advice(通知):AOP在特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around

Android网络请求框架AsyncHttpClient实例详解(配合JSON解析调用接口)

最近做项目要求使用到网络,想来想去选择了AsyncHttpClient框架开进行APP开发.在这里把我工作期间遇到的问题以及对AsyncHttpClient的使用经验做出相应总结,希望能对您的学习有所帮助. 首先按照惯例先来简单了解一些AsyncHttpClient网络框架的一些知识. 1.简介 Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnect,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用android-a

App域名劫持之DNS高可用 - 开源版HttpDNS方案详解(转)

http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=209805123&idx=1&sn=ced8d67c3e2cc3ca38ef722949fa21f8&3rd=MzA3MDU4NTYzMw==&scene=6#rd 主题 开源 本文根据冯磊和赵星宇在“高可用架构”微信群所做的HttpDNS智能缓存库原理整理而成,转发请注明来自微信公众号ArchNotes. 冯磊,目前主要从事手机应用平台的构建,任职新浪网技术