转自:http://blog.csdn.net/earbao/article/details/44901061
apache DBUtils是java编程中的数据库操作实用工具,小巧简单实用,
1.对于数据表的读操作,他可以把结果转换成List,Array,Set等java集合,便于程序员操作;
2.对于数据表的写操作,也变得很简单(只需写sql语句)
3.可以使用数据源,使用JNDI,数据库连接池等技术来优化性能--重用已经构建好的数据库连接对象,而不像php,asp那样,费时费力的不断重复的构建和析构这样的对象。
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中中字段的左右空格。Trim()
主要方法:
DbUtils类:启动类
ResultSetHandler接口:转换类型接口
MapListHandler类:实现类,把记录转化成List
BeanListHandler类:实现类,把记录转化成List,使记录为JavaBean类型的对象
Qrery Runner类:执行SQL语句的类
Queryrunner.query    —————只可以执行select语句。
Queryrunner.update  —————只可以接收update,delte,insert语句
BeanHandler          ——————返回一个 Bean,结果封装到Bean。只查询第一行。适合根据id查询唯一的一行
BeanListHandler     ——————返回List<Bean>所有行,都封装到List,适合于查询多个结果
MapHandler           ——————与BeanHandler应,只返回第一行,封装成Map类型 - 也适合于查询一个结果集的    适合于关联查询,且没有匹配的Bean。
MapListHandler      ——————与BeanListHandler对应,返回所有,封装成List<Map>类型

ScalarHandler        ——————标量- 用于select count(1)|sum|avg|max …一些聚合函数

  1. package com.jiepu.testdbutil;
  2. import java.sql.ResultSet;
  3. import java.sql.ResultSetMetaData;
  4. import java.sql.SQLException;
  5. import java.sql.Statement;
  6. import java.util.Date;
  7. import java.util.List;
  8. import java.util.Map;
  9. import org.apache.commons.dbutils.QueryRunner;
  10. import org.apache.commons.dbutils.ResultSetHandler;
  11. import org.apache.commons.dbutils.handlers.BeanHandler;
  12. import org.apache.commons.dbutils.handlers.BeanListHandler;
  13. import org.apache.commons.dbutils.handlers.MapHandler;
  14. import org.apache.commons.dbutils.handlers.MapListHandler;
  15. import org.apache.commons.dbutils.handlers.ScalarHandler;
  16. import org.junit.AfterClass;
  17. import org.junit.BeforeClass;
  18. import org.junit.Test;
  19. import org.sqlite.SQLiteDataSource;
  20. //http://www.cnblogs.com/liuwt365/p/4111584.html
  21. public class TestDBUtils {
  22. private static SQLiteDataSource dataSource;
  23. private static QueryRunner runner;
  24. private static String tableName="User";
  25. @BeforeClass
  26. public static  void setUpBeforeClass() throws Exception {
  27. dataSource= new SQLiteDataSource();
  28. dataSource.setUrl("jdbc:sqlite:testdbutil.db");
  29. runner=new QueryRunner(dataSource);
  30. execute("CREATE TABLE IF NOT EXISTS "+tableName+"(id integer primary key autoincrement, name varchar(50),password varchar(50)," +
  31. "age integer,createdate integer)",dataSource);
  32. }
  33. public static int execute(String sql ,SQLiteDataSource dataSource){
  34. Statement statement;
  35. int result =0;
  36. try {
  37. statement = dataSource.getConnection().createStatement();
  38. result= statement.executeUpdate(sql);
  39. } catch (SQLException e) {
  40. e.printStackTrace();
  41. }
  42. return result;
  43. }
  44. @Test
  45. public void Query1() throws Exception
  46. {
  47. //String sql="INSERT INTO users VALUES ('U002','tom','4321' )";
  48. //runner.update(sql);
  49. String sql="INSERT INTO "+tableName+"(name,password,age,createdate) VALUES (?,?,?,?)";
  50. runner.update(sql,"Jim","123456","24",new Date().getTime());
  51. runner.update(sql,"Kim","1234567","24",new Date().getTime());
  52. runner.update(sql,"北京","12345678","24",new Date().getTime());
  53. runner.update(sql,"嘉兴","123456789","24",new Date().getTime());
  54. runner.update(sql,"tom","123456789","24",new Date().getTime());
  55. System.out.println(dataSource);
  56. }
  57. @Test
  58. public void Query2() throws Exception
  59. {
  60. //String sql=" UPDATE users SET NAME='Kim' WHERE NAME='jim' ";
  61. //runner.update(sql);
  62. String sql=" UPDATE "+tableName+" SET name=? WHERE name=? ";
  63. runner.update(sql,"lily","Kim");
  64. Query5();
  65. }
  66. @Test
  67. public void Query3() throws Exception
  68. {
  69. //String sql="DELETE FROM users WHERE NAME='lily' ";
  70. //runner.update(sql);
  71. String sql="DELETE FROM "+tableName+" WHERE name=? ";
  72. runner.update(sql,"tom");
  73. Query5();
  74. }
  75. @Test
  76. public void Query4() throws Exception
  77. {
  78. //String sql="SELECT * FROM users where id ='U002' ";
  79. //user u= runner.query(sql, new  BeanHandler<user>(user.class));
  80. String sql="SELECT * FROM "+tableName+" where id =? ";
  81. User u=runner.query(sql, new BeanHandler<User>(User.class),"2");
  82. System.out.println(u);
  83. }
  84. @Test
  85. public void Query5() throws Exception
  86. {
  87. String sql="select * from "+tableName;
  88. List<User> list= runner.query(sql, new BeanListHandler<User>(User.class));
  89. for(User u:list)
  90. {
  91. System.out.println(u);
  92. }
  93. }
  94. @Test
  95. public void Query6() throws Exception
  96. {
  97. String sql="select id,name,password from "+tableName;
  98. Map<String, Object> map= runner.query(sql, new MapHandler());
  99. System.out.println(map.toString());
  100. }
  101. @Test
  102. public void Query7() throws Exception
  103. {
  104. String sql="select id,name,password from "+tableName;
  105. List<Map<String , Object>> list= runner.query(sql, new MapListHandler());
  106. System.out.println(list);
  107. }
  108. @Test
  109. public void Query8() throws Exception
  110. {
  111. String sql="select count(*) from "+tableName;
  112. Object obj=runner.query(sql, new ScalarHandler());
  113. int i=Integer.valueOf(obj.toString());
  114. System.out.println(i);
  115. }
  116. @Test
  117. public void batch()
  118. {
  119. /**String sql="INSERT INTO "+tableName+"(name,password,age,createdate) VALUES (?,?,?,?)";
  120. List<User> users=new ArrayList<User>();
  121. users.add(new User());
  122. runner.batch(sql, users.toArray());
  123. Query5();*/
  124. }
  125. @Test
  126. public void custom() throws SQLException
  127. {
  128. ResultSetHandler<User[]> h = new ResultSetHandler<User[]>() {
  129. public User[] handle(ResultSet rs) throws SQLException {
  130. if (!rs.next()) {
  131. return null;
  132. }
  133. ResultSetMetaData meta = rs.getMetaData();
  134. int cols = meta.getColumnCount();
  135. User[] result = new User[cols];
  136. for (int i = 0; i < cols; i++) {
  137. User user=new User();
  138. user.setId(rs.getInt(1));
  139. user.setName(rs.getString(2));
  140. user.setPassword(rs.getString(3));
  141. user.setAge(rs.getLong(4));
  142. user.setCreatedate(rs.getLong(5));
  143. result[i]=user;
  144. rs.next();
  145. }
  146. return result;
  147. }
  148. };
  149. User[] result = runner.query("SELECT * FROM "+tableName+" WHERE age=?", h, "24");
  150. for (User user : result) {
  151. System.out.println(user);
  152. }
  153. }
  154. //http://wenku.baidu.com/view/6d4bb27602768e9951e73849.html
  155. @AfterClass
  156. public static void setUpAfterclass()
  157. {
  158. dataSource=null;
  159. runner=null;
  160. }
  161. }
  1. package com.jiepu.testdbutil;
  2. public class User {
  3. //使用dbutil 实体类成员不要使用基本类型int long 应该使用封装类型 Integer Long
  4. private Integer id;
  5. private String name;
  6. private String password;
  7. private Long age;
  8. private Long createdate;
  9. public Integer getId() {
  10. return id;
  11. }
  12. public void setId(Integer id) {
  13. this.id = id;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. public String getPassword() {
  22. return password;
  23. }
  24. public void setPassword(String password) {
  25. this.password = password;
  26. }
  27. public Long getAge() {
  28. return age;
  29. }
  30. public void setAge(Long age) {
  31. this.age = age;
  32. }
  33. public Long getCreatedate() {
  34. return createdate;
  35. }
  36. public void setCreatedate(Long createdate) {
  37. this.createdate = createdate;
  38. }
  39. @Override
  40. public String toString() {
  41. return "User [id=" + id + ", name=" + name + ", password=" + password
  42. + ", age=" + age + ", createdate=" + createdate + "]";
  43. }
  44. }

maven pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.jiepu</groupId>
  5. <artifactId>testdbutil</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <packaging>jar</packaging>
  8. <name>testdbutil</name>
  9. <url>http://maven.apache.org</url>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. </properties>
  13. <dependencies>
  14. <dependency>
  15. <groupId>junit</groupId>
  16. <artifactId>junit</artifactId>
  17. <version>4.8.1</version>
  18. </dependency>
  19. <dependency>
  20. <groupId>commons-dbutils</groupId>
  21. <artifactId>commons-dbutils</artifactId>
  22. <version>1.6</version>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.xerial</groupId>
  26. <artifactId>sqlite-jdbc</artifactId>
  27. <version>3.8.7</version>
  28. </dependency>
  29. </dependencies>
  30. </project>

apache DBUtils 使用例子demo的更多相关文章

  1. JDBC 学习笔记(四)—— 自定义JDBC框架+Apache—DBUtils框架+事务管理+操作多表

    本文目录:       1.自定义JDBC框架 ——数据库元数据:DataBaseMetaData        2.自定义JDBC框架 ——数据库元数据:DataBaseMetaData       ...

  2. Apache DBUtils使用总结 【转】

    Apache DBUtils使用总结   DBUtils是个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果集封装成JavaBean,这就为我们做了最枯燥乏味. ...

  3. Apache—DBUtils框架简介

    转载自:http://blog.csdn.net/fengdongkun/article/details/8236216 Apache—DBUtils框架简介.DbUtils类.QueryRunner ...

  4. Apache—dbutils开源JDBC工具类库简介

    Apache—dbutils开源JDBC工具类库简介 一.前言 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用 ...

  5. org.apache.hadoop.util.Shell demo/例子

    package cn.shell; import java.io.IOException; import org.apache.hadoop.util.Shell; public class Shel ...

  6. Apache DbUtils - JDBC轻量级封装的工具包

    前段时间使用了Apache Common DbUtils这个工具,在此留个印,以备不时查看.大家都知道现在市面上的数据库访问层的框架很多,当然很多都是包含了OR-Mapping工作步骤的例如大家常用的 ...

  7. Apache DbUtils 探秘

    听说Apache的DbUtils很好用,而且是对jdbc的简单的封装,所以可以和jdbc一起混搭,多以今天就来尝试一下,关于DbUtils 是如何使用的. 准备 数据库: MySQL 依赖: mysq ...

  8. Apache—DBUtils框架

    1.所需要jar包 commons-collections-2.1.1.jarmchange-commons-java-0.2.11.jarmysql-connector-java-5.1.18-bi ...

  9. DbUtils使用例子

    DbUtils: JDBC Utility Component Examples This page provides examples that show how DbUtils may be us ...

随机推荐

  1. pythonDjango开发-创建django程序

    1.创建jgango程序 a.命令 cmd命令行下 进入到需要创建项目的路径下 django-admin startproject mysite  创建项目 cd mysite 进入项目文件夹 pyt ...

  2. 2 timeit模块,python中数据结构

    1.timeit模块:代码事件测量模块 timeit模块可以用来测试一小段Python代码的执行速度. class timeit.Timer(stmt='pass', setup='pass', ti ...

  3. AGC 007 D - Shik and Game

    D - Shik and Game 链接 题意: 数轴上有一个人,从0出发到E,速度为1.数轴上还有n只熊,每只熊会在经过后的T时刻后产生一个金币.给定E,T以及n个熊的坐标pi,求收集完所有金币并到 ...

  4. P3707 [SDOI2017]相关分析

    P3707 [SDOI2017]相关分析 线段树裸题?但是真的很麻烦QAQ 题目给的式子是什么不用管,大力拆开,就是\(\frac{\sum x_iy_i-\overline xy_i-\overli ...

  5. 【POJ2832 】【Tyvj1460】【 7.22Test 】询问

    几种版本的题面 Description You are given an undirected graph G with N vertices and M edges. Each edge has a ...

  6. jQuery瀑布流详解(PC及移动端)

    前言 瀑布流布局已成为当今非常普遍的图片展示方式,无论是PC还是手机等移动设备上.这种布局图片的样式大概分为三种:等高等宽.等宽不等高.等高不等宽,接下来我们就最为普遍的等宽不等高形式来作为示例. 我 ...

  7. 爬取代理IP

    现在爬虫好难做啊,有些网站直接封IP,本人小白一个,还没钱,只能找免费的代理IP,于是去爬了西刺免费代理,结果技术值太低,程序还没调试好, IP又被封了... IP又被封了... IP又被封了... ...

  8. STM平台增加性能测试/稳定性测试部分【二】

    [一]方案 基本上测试针对产品的各项方案大体是如下的: 如上所示,针对产品的性能测试主要步骤如下: 1.造数据,在产品业务流上,产生所需的数据,数据量以(稳定性或者压测指标确定) 2.根据步骤1,设定 ...

  9. parewise算法性能优化

    在<接口自动化测试框架-AIM>这篇博客中,提到了parewise算法. 这次对其进行性能优化,共3点. 一. 因为笛卡尔积和两两拆分,是有序的. 就保证了两两拆分后的每列都是相同位置的元 ...

  10. 自动分配ip的方法- 【Linux】

    1.  查看本机无线网络使用的网卡 2.  设置vbox的网络连接为桥接,并选择本机无线网络对应的网卡 3.  进入系统,输入ifconfig命令,记录下系统的HWaddr 4.  修改系统ip配置文 ...