dbUtil

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


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> 

package

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;  
    }  
  
} 
 
  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.     }  

借鉴别人的代码,回头自己研究。。。。。。

package com.parddu.dao; import java.io.IOException; import java.sql.*; import java.util.Properties; /** * 数据库功能类 * @author parddu * @version Sep 29, 2010 9:49:31 AM */ class DButil { private String driver=null; //驱动 private String dbName=null; //数据库名 private String host=null; //主机名 private String point=null; //端口 private String userName=null; //登录帐号 private String userPass=null; //登录密码 private static DButil info = null; private DButil(){} /** * 初始化方法,加载数据库连接信息 * @throws IOException */ private static void init() throws IOException{ Properties prop = new Properties(); prop.load(DButil.class.getResourceAsStream("/db_config.properties")); info = new DButil(); info.driver = prop.getProperty("driver"); info.dbName = prop.getProperty("dbName"); info.host = prop.getProperty("host"); info.point = prop.getProperty("point"); info.userName = prop.getProperty("userName"); info.userPass = prop.getProperty("userPass"); } /** * 得到数据库连接对象 * @return 数据库连接对象 */ static Connection getConn(){ Connection conn=null; if(info == null){ try { init(); } catch (IOException e) { throw new RuntimeException(e.getMessage()); } } if(info!=null){ try { Class.forName(info.driver); String url="jdbc:sqlserver://" + info.host + ":" + info.point + ";databaseName=" + info.dbName; conn=DriverManager.getConnection(url,info.userName,info.userPass); } catch (Exception e) { throw new RuntimeException(e.getMessage()); } } else{ throw new RuntimeException("读取数据库配置信息异常!"); } return conn; } /** * 关闭查询数据库访问对象 * @param rs 结果集 * @param st 上下文 * @param conn 连接对象 */ static void closeConn(ResultSet rs, Statement st,Connection conn){ try { rs.close(); } catch (Exception e) {} try { st.close(); } catch (Exception e) {} try { conn.close(); } catch (Exception e) {} } /** * 关闭增、删、该数据库访问对象 * @param st 上下文对象 * @param conn 连接对象 */ static void closeConn(Statement st ,Connection conn){ try{ st.close(); conn.close(); }catch(Exception e){} } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值