转自: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>

最新文章

  1. 转:聊聊mavenCenter和JCenter
  2. hibernate通过注解实现实体和表的映射
  3. 【测试】在hr用户下自行创建T1和T2表写一条SQL语句,(NL连接)
  4. Oracle DataGuard搭建(二)
  5. HashMap和Hashtable的区别(1)
  6. Codechef Nuclear Reactors 题解
  7. js“分享到”侧边框伸缩实现
  8. html锚点 点击跳转到页面指定位置
  9. WIN10系统触摸板快捷键
  10. eclipse中alt+/失效的几种解决方法
  11. python +ps 三方面库整理
  12. Flask 里的WEB表单应用
  13. JavaScript学习-4——DOM对象、事件
  14. Html5画钟表盘/指针实时跳动
  15. python找出数组中第二大的数
  16. Yarn 的日志聚集功能配置使用
  17. 从PHP5.0到PHP7.1的性能全评测
  18. Qt_QString.indesOf和mid测试
  19. POJ3208魔鬼数
  20. 3.jquery在js文件中获取选择器对象

热门文章

  1. UOJ UR#9 App管理器
  2. 很详细的SpringBoot整合UEditor教程
  3. linux bash Shell脚本经典 Fork炸弹演示及命令详解
  4. 2018年美国大学生数学建模竞赛(MCM/ICM) B题解题思路
  5. Unity优化方向——优化Unity游戏中的图形渲染(译)
  6. Laya自动图集原理
  7. SNMP TRAP报文解析
  8. Kubernetes集群部署篇( 一)
  9. CS224n学习笔记1——深度自然语言处理
  10. excel窗口独立显示/单独显示