转自: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. 确定有限自动机 valid number

    原题地址:http://oj.leetcode.com/problems/valid-number/ 题意:判断输入的字符串是否是合法的数. 解题思路:这题只能用确定有穷状态自动机(DFA)来写会比较 ...

  2. Kafka系列三 java API操作

    使用java API操作kafka 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...

  3. 如何把项目通过git上传之github完整教程

    作为一个有追求的程序员,需要撸点自己的开源项目,虽然我现在只是在学着造轮子,但这并不影响我成为大神的心.Github是基于git实现的代码托管,很多程序员在上面托管自己的开源项目,我使用Github也 ...

  4. (转)js在数组中删除重复的元素自保留一个(两种实现思路)

    例如:var student = [‘qiang','ming','tao','li','liang','you','qiang','tao']; 第一种思路是:遍历要删除的数组arr, 把元素分别放 ...

  5. .net 分布式学习计划

    一: 1:.net分布式系统架构的思路     https://blog.csdn.net/slowlifes/article/details/53162014 2: nginx+iis实现负载均衡 ...

  6. 为什么 Action/ViewController/ProperttyEditor不可见或不可用?

    英文版:https://documentation.devexpress.com/eXpressAppFramework/112818/Concepts/Extend-Functionality/De ...

  7. vi/vim 常用命令 之 一图定天下!

    直接上干活,一张图解决~

  8. 优化JDBC开发

    一.元数据 元数据:数据库.表.列的定义信息 1.DataBaseMetaData对象 getURL():返回一个String类对象,代表数据库的URL. getUserName():返回连接当前数据 ...

  9. Appium+python自动化2-环境搭建(下)

    上一篇android测试开发环境已经准备好, 接下来就是appium的环境安装了.环境安装过程中切勿浮躁,按照步骤一个个来. 环境装好后,可以用真机连电脑,也可以用android-sdk里面的模拟器( ...

  10. 关于摄像头PCB图设计经验谈

    摄像头PCB设计,因为客观原因等.容易引起干扰这是个涉及面大的问题.我们抛开其它因素,仅仅就PCB设计环节来说,分享以下几点心得,供参考交流: 1.合理布置电源滤波/退耦电容:一般在原理图中仅画出若干 ...