apache DBUtils 使用例子demo

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 …一些聚合函数

package com.jiepu.testdbutil;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.sqlite.SQLiteDataSource;
//http://www.cnblogs.com/liuwt365/p/4111584.html
public class TestDBUtils {
	private static SQLiteDataSource dataSource;
	private static QueryRunner runner;
	private static String tableName="User";
	
	@BeforeClass
	public static  void setUpBeforeClass() throws Exception {
		
		dataSource= new SQLiteDataSource();
		dataSource.setUrl("jdbc:sqlite:testdbutil.db");
		runner=new QueryRunner(dataSource);
		execute("CREATE TABLE IF NOT EXISTS "+tableName+"(id integer primary key autoincrement, name varchar(50),password varchar(50)," +
				"age integer,createdate integer)",dataSource);
		
	}
	public static int execute(String sql ,SQLiteDataSource dataSource){
		Statement statement;
		int result =0;
		try {
			statement = dataSource.getConnection().createStatement();
			result= statement.executeUpdate(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	
		return result;
	}
	
	@Test
    public void Query1() throws Exception
    {
  
        //String sql="INSERT INTO users VALUES ('U002','tom','4321' )";
        //runner.update(sql);
        String sql="INSERT INTO "+tableName+"(name,password,age,createdate) VALUES (?,?,?,?)";
        runner.update(sql,"Jim","123456","24",new Date().getTime());
        runner.update(sql,"Kim","1234567","24",new Date().getTime());
        runner.update(sql,"北京","12345678","24",new Date().getTime());
        runner.update(sql,"嘉兴","123456789","24",new Date().getTime());
        runner.update(sql,"tom","123456789","24",new Date().getTime());
        System.out.println(dataSource);
    }
	@Test
    public void Query2() throws Exception
    {
        //String sql=" UPDATE users SET NAME='Kim' WHERE NAME='jim' ";
        //runner.update(sql);
        String sql=" UPDATE "+tableName+" SET name=? WHERE name=? ";
        runner.update(sql,"lily","Kim");
        Query5();
    }
	@Test
    public void Query3() throws Exception
    {
        //String sql="DELETE FROM users WHERE NAME='lily' ";
        //runner.update(sql);
        String sql="DELETE FROM "+tableName+" WHERE name=? ";
        runner.update(sql,"tom");
        Query5();
    }
	
	@Test
    public void Query4() throws Exception
    {
        //String sql="SELECT * FROM users where id ='U002' ";
        //user u= runner.query(sql, new  BeanHandler<user>(user.class));       
        String sql="SELECT * FROM "+tableName+" where id =? ";
        User u=runner.query(sql, new BeanHandler<User>(User.class),"2");
        System.out.println(u);
    }
	@Test
    public void Query5() throws Exception
    {
        String sql="select * from "+tableName;
        List<User> list= runner.query(sql, new BeanListHandler<User>(User.class));
        for(User u:list)
        {
            System.out.println(u);
        }
    }
	@Test
    public void Query6() throws Exception
    {
        String sql="select id,name,password from "+tableName;
        Map<String, Object> map= runner.query(sql, new MapHandler());
        System.out.println(map.toString());
    }
	@Test
    public void Query7() throws Exception
    {
		String sql="select id,name,password from "+tableName;
        List<Map<String , Object>> list= runner.query(sql, new MapListHandler());
        System.out.println(list);
    }
	@Test
    public void Query8() throws Exception
    {
        String sql="select count(*) from "+tableName;
        Object obj=runner.query(sql, new ScalarHandler());
        int i=Integer.valueOf(obj.toString());
        System.out.println(i);
    }
	@Test
	public void batch()
	{
		 /**String sql="INSERT INTO "+tableName+"(name,password,age,createdate) VALUES (?,?,?,?)";
	     List<User> users=new ArrayList<User>();
	     users.add(new User());
		 runner.batch(sql, users.toArray());
		 Query5();*/	
	}
	@Test
	public void custom() throws SQLException
	{
		ResultSetHandler<User[]> h = new ResultSetHandler<User[]>() {
		    public User[] handle(ResultSet rs) throws SQLException {
		        if (!rs.next()) {
		            return null;
		        }
		    
		        ResultSetMetaData meta = rs.getMetaData();
		        int cols = meta.getColumnCount();
		        User[] result = new User[cols];
		        
		        for (int i = 0; i < cols; i++) {   	
		        	User user=new User();
		        	user.setId(rs.getInt(1));
		        	user.setName(rs.getString(2));
		        	user.setPassword(rs.getString(3));
		        	user.setAge(rs.getLong(4));
		        	user.setCreatedate(rs.getLong(5));	        	
		        	result[i]=user;
		        	rs.next();
		        	
		        }

		        return result;
		    }
		};
		
		User[] result = runner.query("SELECT * FROM "+tableName+" WHERE age=?", h, "24");
		for (User user : result) {
			System.out.println(user);
		}
		
		
		
	}
	//http://wenku.baidu.com/view/6d4bb27602768e9951e73849.html
	@AfterClass
	public static void setUpAfterclass()
	{
		dataSource=null;
		runner=null;
	}

}

package com.jiepu.testdbutil;
public class User {
	//使用dbutil 实体类成员不要使用基本类型int long 应该使用封装类型 Integer Long
	private Integer id;	
	private String name;	
	private String password;
	private Long age;
	private Long createdate;	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Long getAge() {
		return age;
	}
	public void setAge(Long age) {
		this.age = age;
	}
	public Long getCreatedate() {
		return createdate;
	}
	public void setCreatedate(Long createdate) {
		this.createdate = createdate;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", password=" + password
				+ ", age=" + age + ", createdate=" + createdate + "]";
	}
}
maven pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.jiepu</groupId>
	<artifactId>testdbutil</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>testdbutil</name>
	<url>http://maven.apache.org</url>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.8.1</version>
		</dependency>
		<dependency>
			<groupId>commons-dbutils</groupId>
			<artifactId>commons-dbutils</artifactId>
			<version>1.6</version>
		</dependency>
		<dependency>
			<groupId>org.xerial</groupId>
			<artifactId>sqlite-jdbc</artifactId>
			<version>3.8.7</version>
		</dependency>
	</dependencies>
</project>




  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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 ">1 对于数据表的读操作 他可以把结果转换成List Array Set等java集合 便于程序员操作; 2 对于数据表的写操作 也变得很简单(只需写sql语句) 3 可以使用数据源 使用JNDI 数据库连接池等技术来优化性能 重用已经构建好的 [更多]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值