apache DBUtils 使用例子demo

落花浮王杯 提交于 2020-02-20 10:53:34
转自: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.   
  3. import java.sql.ResultSet;  
  4. import java.sql.ResultSetMetaData;  
  5. import java.sql.SQLException;  
  6. import java.sql.Statement;  
  7. import java.util.Date;  
  8. import java.util.List;  
  9. import java.util.Map;  
  10.   
  11. import org.apache.commons.dbutils.QueryRunner;  
  12. import org.apache.commons.dbutils.ResultSetHandler;  
  13. import org.apache.commons.dbutils.handlers.BeanHandler;  
  14. import org.apache.commons.dbutils.handlers.BeanListHandler;  
  15. import org.apache.commons.dbutils.handlers.MapHandler;  
  16. import org.apache.commons.dbutils.handlers.MapListHandler;  
  17. import org.apache.commons.dbutils.handlers.ScalarHandler;  
  18. import org.junit.AfterClass;  
  19. import org.junit.BeforeClass;  
  20. import org.junit.Test;  
  21. import org.sqlite.SQLiteDataSource;  
  22. //http://www.cnblogs.com/liuwt365/p/4111584.html  
  23. public class TestDBUtils {  
  24.     private static SQLiteDataSource dataSource;  
  25.     private static QueryRunner runner;  
  26.     private static String tableName="User";  
  27.       
  28.     @BeforeClass  
  29.     public static  void setUpBeforeClass() throws Exception {  
  30.           
  31.         dataSource= new SQLiteDataSource();  
  32.         dataSource.setUrl("jdbc:sqlite:testdbutil.db");  
  33.         runner=new QueryRunner(dataSource);  
  34.         execute("CREATE TABLE IF NOT EXISTS "+tableName+"(id integer primary key autoincrement, name varchar(50),password varchar(50)," +  
  35.                 "age integer,createdate integer)",dataSource);  
  36.           
  37.     }  
  38.     public static int execute(String sql ,SQLiteDataSource dataSource){  
  39.         Statement statement;  
  40.         int result =0;  
  41.         try {  
  42.             statement = dataSource.getConnection().createStatement();  
  43.             result= statement.executeUpdate(sql);  
  44.         } catch (SQLException e) {  
  45.             e.printStackTrace();  
  46.         }  
  47.       
  48.         return result;  
  49.     }  
  50.       
  51.     @Test  
  52.     public void Query1() throws Exception  
  53.     {  
  54.     
  55.         //String sql="INSERT INTO users VALUES ('U002','tom','4321' )";  
  56.         //runner.update(sql);  
  57.         String sql="INSERT INTO "+tableName+"(name,password,age,createdate) VALUES (?,?,?,?)";  
  58.         runner.update(sql,"Jim","123456","24",new Date().getTime());  
  59.         runner.update(sql,"Kim","1234567","24",new Date().getTime());  
  60.         runner.update(sql,"北京","12345678","24",new Date().getTime());  
  61.         runner.update(sql,"嘉兴","123456789","24",new Date().getTime());  
  62.         runner.update(sql,"tom","123456789","24",new Date().getTime());  
  63.         System.out.println(dataSource);  
  64.     }  
  65.     @Test  
  66.     public void Query2() throws Exception  
  67.     {  
  68.         //String sql=" UPDATE users SET NAME='Kim' WHERE NAME='jim' ";  
  69.         //runner.update(sql);  
  70.         String sql=" UPDATE "+tableName+" SET name=? WHERE name=? ";  
  71.         runner.update(sql,"lily","Kim");  
  72.         Query5();  
  73.     }  
  74.     @Test  
  75.     public void Query3() throws Exception  
  76.     {  
  77.         //String sql="DELETE FROM users WHERE NAME='lily' ";  
  78.         //runner.update(sql);  
  79.         String sql="DELETE FROM "+tableName+" WHERE name=? ";  
  80.         runner.update(sql,"tom");  
  81.         Query5();  
  82.     }  
  83.       
  84.     @Test  
  85.     public void Query4() throws Exception  
  86.     {  
  87.         //String sql="SELECT * FROM users where id ='U002' ";  
  88.         //user u= runner.query(sql, new  BeanHandler<user>(user.class));         
  89.         String sql="SELECT * FROM "+tableName+" where id =? ";  
  90.         User u=runner.query(sql, new BeanHandler<User>(User.class),"2");  
  91.         System.out.println(u);  
  92.     }  
  93.     @Test  
  94.     public void Query5() throws Exception  
  95.     {  
  96.         String sql="select * from "+tableName;  
  97.         List<User> list= runner.query(sql, new BeanListHandler<User>(User.class));  
  98.         for(User u:list)  
  99.         {  
  100.             System.out.println(u);  
  101.         }  
  102.     }  
  103.     @Test  
  104.     public void Query6() throws Exception  
  105.     {  
  106.         String sql="select id,name,password from "+tableName;  
  107.         Map<String, Object> map= runner.query(sql, new MapHandler());  
  108.         System.out.println(map.toString());  
  109.     }  
  110.     @Test  
  111.     public void Query7() throws Exception  
  112.     {  
  113.         String sql="select id,name,password from "+tableName;  
  114.         List<Map<String , Object>> list= runner.query(sql, new MapListHandler());  
  115.         System.out.println(list);  
  116.     }  
  117.     @Test  
  118.     public void Query8() throws Exception  
  119.     {  
  120.         String sql="select count(*) from "+tableName;  
  121.         Object obj=runner.query(sql, new ScalarHandler());  
  122.         int i=Integer.valueOf(obj.toString());  
  123.         System.out.println(i);  
  124.     }  
  125.     @Test  
  126.     public void batch()  
  127.     {  
  128.          /**String sql="INSERT INTO "+tableName+"(name,password,age,createdate) VALUES (?,?,?,?)"; 
  129.          List<User> users=new ArrayList<User>(); 
  130.          users.add(new User()); 
  131.          runner.batch(sql, users.toArray()); 
  132.          Query5();*/      
  133.     }  
  134.     @Test  
  135.     public void custom() throws SQLException  
  136.     {  
  137.         ResultSetHandler<User[]> h = new ResultSetHandler<User[]>() {  
  138.             public User[] handle(ResultSet rs) throws SQLException {  
  139.                 if (!rs.next()) {  
  140.                     return null;  
  141.                 }  
  142.               
  143.                 ResultSetMetaData meta = rs.getMetaData();  
  144.                 int cols = meta.getColumnCount();  
  145.                 User[] result = new User[cols];  
  146.                   
  147.                 for (int i = 0; i < cols; i++) {       
  148.                     User user=new User();  
  149.                     user.setId(rs.getInt(1));  
  150.                     user.setName(rs.getString(2));  
  151.                     user.setPassword(rs.getString(3));  
  152.                     user.setAge(rs.getLong(4));  
  153.                     user.setCreatedate(rs.getLong(5));                
  154.                     result[i]=user;  
  155.                     rs.next();  
  156.                       
  157.                 }  
  158.   
  159.                 return result;  
  160.             }  
  161.         };  
  162.           
  163.         User[] result = runner.query("SELECT * FROM "+tableName+" WHERE age=?", h, "24");  
  164.         for (User user : result) {  
  165.             System.out.println(user);  
  166.         }  
  167.           
  168.           
  169.           
  170.     }  
  171.     //http://wenku.baidu.com/view/6d4bb27602768e9951e73849.html  
  172.     @AfterClass  
  173.     public static void setUpAfterclass()  
  174.     {  
  175.         dataSource=null;  
  176.         runner=null;  
  177.     }  
  178.   
  179. }  
  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>  
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!