一、为什么要使用dbutils

  使用dbutils可以极大程度的简化代码书写,使得开发进度更快,效率更高

二、dbutils下载地址

  http://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi


出现的ds为数据源对象,可以是某个数据库连接池的DataSource,也可以是自定义数据库连接池的DataSource,这里我是用了dbcp数据库连接池。

 package day16.regular.utils;

 import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp2.BasicDataSourceFactory; //使用第三方jar包创建dbcp连接池
public class DataSourceUtils_DBCP {
private DataSourceUtils_DBCP(){}//使用私有修饰构造方法,可以防止创建对象,这样可以确保只有一个DataSource对象
private static DataSource ds;
static
{
Properties properties=new Properties();
try {
properties.load(DataSourceUtils_DBCP.class.getClassLoader().getResourceAsStream("config_dbcp.properties"));
ds=BasicDataSourceFactory.createDataSource(properties);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection()
{
Connection conn=null;
try {
conn=ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static DataSource getDataSource()
{
return ds;
}
}

DataSourceUtils_DBCP.java

private static DataSource ds=DataSourceUtils_DBCP.getDataSource();

三、更新操作方法示例(delete语句略)。

public void testInsert()
{
QueryRunner run=new QueryRunner(ds);
String sql="insert into people(id,name,age,sex) values(?,?,?,?)";
try {
run.update(sql,"001","小强",12,"男");
} catch (SQLException e) {
e.printStackTrace();
}
}

  使用dbutils可以实现预编译。

四、ArrayListHandler用法(不需掌握)。

public void testSelect_ArrayListHandler() throws SQLException
{
QueryRunner run=new QueryRunner(ds);
String sql="select * from people";
List<Object[]>arr=run.query(sql,new ArrayListHandler());
//执行该方法将所有的结果存放到了一个list中,每一行结果保存到一个object数组中
for(Object obj[]:arr)
{
for(Object o:obj)
{
System.out.print(o+" ");
}
System.out.println();
}
/**
* 001 小强 12 男
002 张三 13 男
003 李四 14 男
004 王五 14 男
005 赵六 14 男
006 陈七 14 男
*/
}

五、BeanHandler和BeanListHandler用法(重点掌握)

  1.BeanHandler:调用QueryRunner的query方法,并提供相应的参数,就可以获取一个已经封装好了的Bean对象(需要实现准备好一个javaBean,字段名要完全匹配)。

public void testSelect_BeanHandler() throws SQLException
{
QueryRunner run=new QueryRunner(ds);
String sql="select * from people";
People people=run.query(sql,new BeanHandler<People>(People.class));
//使用该方法能够自动将结果集的第一行封装到一个Bean对象中。
System.out.println(people);
/**
* People [id=001, name=小强, age=12, sex=男]
*/
}

  2.BeanListHandler:调用QueryRunner的query方法,并提供相应的参数,就可以获取一个List对象,该对象中的每一个元素都是一个javabean对象。

public void testSelect_BeanListHandler() throws SQLException
{
QueryRunner run=new QueryRunner(ds);
String sql="select * from people";
List<People>list=run.query(sql, new BeanListHandler<People>(People.class));
for(People people:list)
{
System.out.println(people);
}
/**
* People [id=001, name=小强, age=12, sex=男]
People [id=002, name=张三, age=13, sex=男]
People [id=003, name=李四, age=14, sex=男]
People [id=004, name=王五, age=14, sex=男]
People [id=005, name=赵六, age=14, sex=男]
People [id=006, name=陈七, age=14, sex=男]
*/
}

六、ColumnListHandler:获取某个字段的所有取值,并封装到一个List对象中(不要求掌握)。

public void testSelect_ColumnListHandler() throws SQLException
{
QueryRunner run=new QueryRunner(ds);
String sql="select * from people";
List<String>list=run.query(sql, new ColumnListHandler<String>("sex"));//不带任何参数的默认查询第一行
for(String obj:list)
{
System.out.println(obj);
}
/**
* 男





*/
}

七、KeyedHandler:获取一个键值对,键为表的主键,值为一个Map对象,该封装了一行数据的键值对,键是字段名(重点掌握)。

public void testSelect_KeyHandler() throws SQLException
{
//该方法不重要,不需要重点掌握
QueryRunner run=new QueryRunner(ds);
String sql="select * from people";
Map<String, Map<String, Object>>map=run.query(sql, new KeyedHandler<String>("id"));
Iterator<String>it=map.keySet().iterator();
while(it.hasNext())
{
Map<String,Object>m=map.get(it.next());
System.out.println(m);
}
/* {id=004, name=王五, age=14, sex=男}
{id=005, name=赵六, age=14, sex=男}
{id=006, name=陈七, age=14, sex=男}
{id=001, name=小强, age=12, sex=男}
{id=002, name=张三, age=13, sex=男}
{id=003, name=李四, age=14, sex=男}
*/
}

八、MapHandler:封装第一行数据到一个Map对象(不需要掌握)。

public void testSelect_MapHandler() throws SQLException
{
QueryRunner run=new QueryRunner(ds);
String sql="select * from user";
Map<String, Object>map=run.query(sql,new MapHandler());
//该执行结果只封装第一行。
System.out.println(map);
/* {id=0001, name=小强, age=12}*/
}

九、MapListHandler:封装每一行数据到一个Map,并保存到一个List中。(重点掌握)

public void testSelect_MapListHandler() throws SQLException
{
QueryRunner run=new QueryRunner(ds);
String sql="select * from user";
List<Map<String,Object>> list=run.query(sql, new MapListHandler());
/**
* 该语句的执行结果是将数据库的查询结果存放到List中,其中每一行存放到一个Map对象中。
*/
for(Map<String,Object> map:list)
{
System.out.println(map);
}
/*
{id=0001, name=小强, age=12}
{id=0002, name=小明, age=13}
*/
}

十、ScalarHandler:使用聚合函数(如count、sum等)的时候可以使用该方法简化书写(重点掌握)

public void testSelect_ScalarHandler() throws SQLException
{
QueryRunner run=new QueryRunner(ds);
String sql="select count(1) from user";
Object value=run.query(sql, new ScalarHandler<Object>());
//ScalarHandler用于执行带有聚合函数的查询,执行count方法的时候比较方便。
System.out.println(value);
}
  /*
    2
  */

【Java EE 学习 16 下】【dbutils的使用方法】的更多相关文章

  1. 【Java EE 学习 67 下】【OA项目练习】【SSH整合JBPM工作流】【JBPM项目实战】

    一.SSH整合JBPM JBPM基础见http://www.cnblogs.com/kuangdaoyizhimei/p/4981551.html 现在将要实现SSH和JBPM的整合. 1.添加jar ...

  2. 【Java EE 学习 29 下】【JDBC编程中操作Oracle数据库】【调用存储过程的方法】

    疑问:怎样判断存储过程执行之后返回值是否为空. 一.连接oracle数据库 1.需要的jar包:在安装的oracle中就有,所以不需要到官网下载,我的oracle11g下:D:\app\kdyzm\p ...

  3. 【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】

    一.动态SQL 什么是动态SQL,就是在不同的条件下,sql语句不相同的意思,曾经在“酒店会员管理系统”中写过大量的多条件查询,那是在SSH的环境中,所以只能在代码中进行判断,以下是其中一个多条件查询 ...

  4. 【Java EE 学习 74 下】【数据采集系统第六天】【使用Jfreechart的统计图实现】【将JFreechart整合到项目中】

    之前说了JFreechart的基本使用方法,包括生成饼图.柱状统计图和折线统计图的方法.现在需要将其整合到数据采集系统中根据调查结果生成三种不同的统计图. 一.统计模型的分析和设计 实现统计图显示的流 ...

  5. 【Java EE 学习 69 下】【数据采集系统第一天】【实体类分析和Base类书写】

    之前SSH框架已经搭建完毕,现在进行实体类的分析和Base类的书写.Base类是抽象类,专门用于继承. 一.实体类关系分析 既然是数据采集系统,首先调查实体(Survey)是一定要有的,一个调查有多个 ...

  6. 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】

    一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...

  7. 【Java EE 学习 33 下】【validate表单验证插件】

    一.validate 1.官方网站:http://jqueryvalidation.org/ 2.文档说明:http://jqueryvalidation.org/documentation/ 3.j ...

  8. 【Java EE 学习 17 下】【数据库导出到Excel】【多条件查询方法】

    一.导出到Excel 1.使用DatabaseMetaData分析数据库的数据结构和相关信息. (1)测试得到所有数据库名: private static DataSource ds=DataSour ...

  9. 【Java EE 学习 16 上】【dbcp数据库连接池】【c3p0数据库连接池】

    一.回顾之前使用的动态代理的方式实现的数据库连接池: 代码: package day16.utils; import java.io.IOException; import java.lang.ref ...

随机推荐

  1. Pyhont-Urllib2

    Urllib2 相当于的Urllib  的升级版 但又不能代替 Urllib 这个我得新手很费解呢...这个问题留着把,,等以后成大牛的时候在回来想想这儿问题!! Urllib2 常用 // 1 设置 ...

  2. 用gulp打包带参数资源做法与asp.net/java项目结合的自动构建方案探讨

    先探讨方案,后续再实现. gulp打包前端教程配置:http://www.cnblogs.com/EasonJim/p/6209951.html 可能存在以下场景: 1.整个服务端采用接口的形式暴露给 ...

  3. Spring IoC容器的初始化过程

    Spring IoC容器的初始化包括 BeanDefinition的Resource定位.载入和注册 这三个基本的过程.IoC容器的初始化过程不包含Bean依赖注入的实现.Bean依赖的注入一般会发生 ...

  4. 牛顿法|阻尼牛顿法|拟牛顿法|DFP算法|BFGS算法|L-BFGS算法

    一直记不住这些算法的推导,所以打算详细点写到博客中以后不记得就翻阅自己的笔记. 泰勒展开式 最初的泰勒展开式,若  在包含  的某开区间(a,b)内具有直到n+1阶的导数,则当x∈(a,b)时,有: ...

  5. 面试题目——《CC150》线程与锁

    package cc150.thread_lock; public class RunnableThreadExample implements Runnable{ public int count ...

  6. Another app is currently holding the yum lock

    摘要 在使用yum安装的时候,出现该error. 错误 Another app is currently holding the yum lock; waiting for it to exit... ...

  7. DataTable数据检索的性能分析(转寒江独钓)

    我们知道在.NET平台上有很多种数据存储,检索解决方案-ADO.NET Entity Framework,ASP.NET Dynamic Data,XML, NHibernate,LINQ to SQ ...

  8. sqlplus连接oracle失败分析和解决

    背景: 多台Linux服务器需要安装Oracle客户端,实现和Oracle数据库连接做业务处理. 安装完第一台后,直接将安装的目录压缩并复制到其他几台机器上,启动sqlplus连接数据库时,一直提示输 ...

  9. 如果asp.net mvc中某个action被执行了两次,请检查是不是以下的原因

    注释 <link rel="icon" href="#"> 这一句后试试

  10. python虚拟机中的异常流控制

    异常:对程序运行中的非正常情况进行抽象.并且提供相应的语法结构和语义元素,使得程序员能够通过这些语法结构和语义元素来方便地描述异常发生时的行为. 1.Python中的异常机制: 1.1Python虚拟 ...