Common Dbutils是操作数据库的组件,对传统操作数据库的类进行二次封装,可以把结果集转化成List。
DBUtils包括3个包:
org.apache.commons.dbutils
org.apache.commons.dbutils.handlers
org.apache.commons.dbutils.wrappers
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
org.apache.commons.dbutils
DbUtils 关闭链接等操作
QueryRunner 进行查询的操作
org.apache.commons.dbutils.handlers
ArrayHandler :将ResultSet中第一行的数据转化成对象数组
ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[]
BeanHandler :将ResultSet中第一行的数据转化成类对象
BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类对象
ColumnListHandler :将ResultSet中某一列的数据存成List,List中存放的是Object对象
KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据
MapHandler :将ResultSet中第一行的数据存成Map映射
MapListHandler :将ResultSet中所有的数据存成List。List中存放的是Map
ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object
org.apache.commons.dbutils.wrappers
SqlNullCheckedResultSet :对ResultSet进行操作,改版里面的值
StringTrimmedResultSet :去除ResultSet中中字段的左右空格。
QueryRunner
构造 QueryRunner : 有两种方法来构造QueryRunner 一种是无参数的 一种是有DataSource类型参数的构造方法
1:QueryRunner() 2:QueryRunner(javax.sql.DataSource ds)
这里使用DataSource 来构造它 使用连接池来构造它的好处就是 我们无需管Connection 对象的创建与关闭了,后面调用QueryRunner对象的方法也无需传入Connection对象了
view plaincopy to clipboardprint?
/**
* dbcp连接池的用法
*/
public class DBUtils {
private static Properties properties;
private static DataSource dataSource;
private static Connection conn;
static {
try {
properties = new Properties();
//载入dbcp的配置文件
properties.load(DBUtils.class.
.getResourceAsStream("/dbcpconfig.properties"));
//创建个BasicDataSourceFactory对象用于创建连接池对象
BasicDataSourceFactory b = new BasicDataSourceFactory();
//把properties对象设置给BasicDataSourceFactory
dataSource = b.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
public static DataSource getdataSource() {
return dataSource;
}
}
注意:需要导入dbcp连接池的jar commons-dbcp-1.2.1.jar 和所依赖的 commons-pool-1.2.jar 和commons-collections-3.1.jar
这样我们就可以构造个queryRunner对象了
QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());
QueryRunner 主要方法 :
view plaincopy to clipboardprint?
//更新一列
queryRunner.update("update Users set username=?,password=? where id = ?", new String[]{"11","22","1"});
//删除一列
queryRunner.update("delete from Users where id =?", 1);
如果要 使用 QueryRunner的查询方法 也就是query()方法的话 那么就需要有对象来接收查询出来的ResultSet
用什么来接收呢? 要用到 实现ResultSetHandler 接口的类
1. BeanHandler 返回个entitybean 对象
view plaincopy to clipboardprint?
//指定返回哪个 entitybean
ResultSetHandler rsh = new BeanHandler(Users.class);
QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());
Users users = (Users) queryRunner.query("select * from Users where id=?",2, rsh);
System.out.println(users.getUsername());
2. BeanListHandler 返回个List List里装的是entitybean 对象
view plaincopy to clipboardprint?
QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());
ResultSetHandler rsh = new BeanListHandler(Users.class);
List<Users> list = (List) queryRunner.query(
"select * from Users ", rsh);
for(Users user:list){
System.out.println(user.getUsername());
}
3. ArrayListHandler 返回List 对象 list里装的为Object数组
view plaincopy to clipboardprint?
QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());
// 使用ArrayListHandler 实现类来存放结果会返回ArrayList对象
ResultSetHandler rsh = new ArrayListHandler();
//list里装的是对象数组
List<Object[]> list = (List) queryRunner.query(
"select * from Users ", rsh);
for(Object[] user:list) {
for(Object obj:user)
{
System.out.println(obj);
}
}
4. ColumnListHandler 返回List 对象
注意: 构造 ColumnListHandler() 对象时候如果 是无参数的话 像这样 ResultSetHandler rsh = new ColumnListHandler(); 查询出来的List 里放的类型为主键的类型 值为主键的值;
view plaincopy to clipboardprint?
ResultSetHandler rsh = new ColumnListHandler();
List<Integer> list = (List) queryRunner.query(
"select * from Users ", rsh);
//System.out.println(list.get(0).getClass().getSimpleName());
for(Integer in:list){
System.out.println(in);
}
构造 ColumnListHandler() 对象时候如果 是有参数的话 ,像这样 ResultSetHandler rsh = new ColumnListHandler(主键值); 那么查询出来的List 里放的是就是这个主键对应的一行的记录;
view plaincopy to clipboardprint?
ResultSetHandler rsh = new ColumnListHandler(2);
List<String> list = (List) queryRunner.query(
"select * from Users ", rsh);
for(String in:list){
System.out.println(in);
}
5. KeyedHandler 根据键返回Map
view plaincopy to clipboardprint?
ResultSetHandler rsh = new KeyedHandler();
//map里装的key为主键的值 value 为主键对应的那行记录名称和记录
Map map = (Map) queryRunner.query(
"select id,username,password from Users ", rsh);
//根据主键值出去那一列
// Map t = (Map) map.get(2);
System.out.println(map.get(2));
6. MapHandler 根据键返回Map
view plaincopy to clipboardprint?
QueryRunner queryRunner = new QueryRunner(DBUtils.getdataSource());
ResultSetHandler rsh = new MapHandler();
Map map = (Map) queryRunner.query(
"select * from Users ", rsh);
System.out.println(map);
下面给出一个完整的例子,建立三个Java文件
BeanListExample.java
view plaincopy to clipboardprint?
package com.sy;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
public class BeanListExample {
public static void main(String[] args) {
Connection conn = null;
String url = "jdbc:mysql://localhost:3306/people";
String jdbcDriver = "com.mysql.jdbc.Driver";
String user = "root";
String password = "hicc";
DbUtils.loadDriver(jdbcDriver);
try {
conn = DriverManager.getConnection(url, user, password);
QueryRunner qr = new QueryRunner();
List results = (List) qr.query(conn, "select id,name from guestbook", new BeanListHandler(Guestbook.class));
for (int i = 0; i < results.size(); i++) {
Guestbook gb = (Guestbook) results.get(i);
System.out.println("id:" + gb.getId() + ",name:" + gb.getName());
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(conn);
}
}
}
Guestbook.java
view plaincopy to clipboardprint?
package com.sy;
public class Guestbook {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
MapListExample.java
view plaincopy to clipboardprint?
package com.sy;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapListHandler;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
public class MapListExample {
public static void main(String[] args) {
Connection conn = null;
String url = "jdbc:mysql://localhost:3306/people";
String jdbcDriver = "com.mysql.jdbc.Driver";
String user = "root";
String password = "hicc";
DbUtils.loadDriver(jdbcDriver);
try {
conn = DriverManager.getConnection(url, user, password);
QueryRunner qr = new QueryRunner();
List results = (List) qr.query(conn, "select id,name from guestmessage", new MapListHandler());
for (int i = 0; i < results.size(); i++) {
Map map = (Map) results.get(i);
System.out.println("id:" + map.get("id") + ",name:" + map.get("name"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(conn);
}
}
}
分享到:
相关推荐
dbutils开源项目用法.doc
commons-dbutils是Apache组织提供的一个开源 JDBC工具类库,能让我们更简单的使用JDBC。它是一个非常小的类包,花几分钟的时间就能掌握它的使用。
commons-dbutils包是Apache开源组织提供的用于操作数据库的工具包。简单来讲,这个工具包就是用来更加方便我们操作数据库的,最近工作中使用了一下,感觉确实方便很多,基本告别自己封装JDBC代码对数据库进行增删改...
# 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作...
演示了JDBC的基本使用方法,以及Druid和C3P0数据源的使用方法。 该示例是基于命令行窗口的CRUD操作。 示例最后演示了Apache Commons DBUtils开源工具类的使用方法。
# 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作...
此工具我不再更新,里面大多数方法我迁移到了hutool工具包中,而其中一些不常用的功能被遗弃,项目暂留做为以后参考。 common-tools 一、数据库工具类 1、com.baijob.commonTools.db.ds C3p0Ds 和 DruidDs分别是...
在使用Dbutils 之前,我们Dao层使用的技术是JDBC,那么分析一下JDBC的弊端: ①数据库链接对象、sql语句操作对象,封装结果集对象,这三个对象会重复定义 ②封装数据的代码重复,而且操作复杂,代码量大 ③释放资源...
commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的...
您可以使用Java像ThinkPHP框架的M方法一样,一行代码搞定数据库操作。以免造成内存溢出。也可以设置手动关闭以替换连接连接,无需重新设置连接实例参数,认为JD内部已做多线程安全处理,详见【0x0A 多线程安全】 。 ...
安卓java读取网页源码 1、本项目要可以实现的功能: A、那种在后台默默运行的...5、cron:目录下提供了定时器相关的使用方法,于spring boot的 @Scheduled(cron = "0 */10 * * * ? ") 功能一模一样 A、@Scheduled注解的
1.commons-beanutils.jar...12.commons-DbUtils.jar:Apache组织提供的一个资源JDBC工具类库,它是对JDBC的简单封装,对传统操作数据库的类进行二次封装,可以把结果集转化成List。 13.commons-Email.jar: 提供开源的API
该文件记录开发过程中的部分配置文件和测试方法。 Author Bright, Xu, xjq, zy Email 目录 项目 Flup一期开发 week1 搭建SpringMVC+Spring+MyBatis,两个关键配置文件 springmvc.xml, spring-mybatis.xml 管理员用户...
运用知识数据库基本查询数据库连接池c3p0运用dbutil.jar包一键封装表单数据到bean对象中利用dbutils.jar包简化对数据库增,删,改,查的代码标签库JavaWeb三层框架的分离将servlet的转发,重定向和方法进行封装,...
3 开源连接池3.1 DBCP3.2 C3P03.3 DBUtils3.3.1 增删改3.3.2 查询3.3.3 ResultSetHandler 常用的实现类 1 JDBC JAVA Database Connectivity java 数据库连接 为什么会出现JDBC? SUN公司提供的一