DBUtils工具类的使用

DBUtils工具类

1.DBUtils工具类,由apache组织提供的工具类,对JDBC做了一些简单封装。    做了查询的封装,把查询的结果封装到List集合 Map集合 JavaBean对象中 做了增删改的封装,编写代码比较少 2.需要导入开发的jar包 commons-dbutils-1.4.jar

3.常见的
QueryRunner
  1.QueryRunner类可以来完成增删改查所有的功能

  2.常用的方法    

QueryRunner() -- 构造方法,没有任何参数,说明他不管理连接的。
     QueryRunner(DataSource ds)                                    -- 构造方法,传入连接池,说明他已经管理连接(从连接池中获取连接,归还连接)

     int update(String sql, Object... params)                      -- 连接已经管理了
     int update(Connection conn, String sql, Object... params)     -- 说明连接没有管理

     <T> T query(String sql, ResultSetHandler<T> rsh, Object... params)        
     <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)

     int [] batch(String sql, Object[][] params)                   -- 批处理的方法(批量执行一些SQL语句)new Object[][]{{xx},{yy}}

4.常见的ResultSetHandler接口  
  1.ResultSetHandler接口,提供了一个方法,让用户自己来封装结果集。
  2.接口中提供了9个实现类,封装结果集的类型都是不同的
      BeanHandler               -- 把一条记录封装到一个JavaBean的对象中。
      BeanListHandler           -- 把一条记录封装到一个JavaBean对象中,再把这些JavaBean封装到一个List集合中。List<JavaBean>

      ArrayHandler              -- 把一条记录封装到一个数组中
      ArrayListHandler          -- 把一条记录封装到一个数组中,把这些数组封装到List集合中

      MapHandler                -- 把一条记录封装到Map集合中
      MapListHandler            -- 把一条记录封装到Map集合中,这些map封装到List集合中

      ColumnListHandler         -- 查询的是某列的数据(select username from t_account),把该列封装到List集合中

      KeyedHandler              -- 把一条记录封装到Map集合中,再把这些map封装到一个大的map集合中

      ScalarHandler             -- 封装的是聚集函数(count sum avg max min)

 例子:

    重写Java ee_02版本增删检查方法:

    重写前的UserDaoImpl类:

package org.Impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.KeyedHandler;
import org.dao.UserDao;
import org.model.User;
import org.util.DBUtil;

/**
 * 
 * @author H_Pioneer
 * 接口实现类
 */

public class UserDaoImpl implements UserDao{
    @Override
    // 定义添加方法
    public boolean addUser(User u) {

        boolean flag=false;
         Connection conn=null;
        PreparedStatement pst=null;
        
        try{
            conn=DBUtil.getConnection();
            String sql="insert into user (username,password) values(?,?)";
            pst=conn.prepareStatement(sql);
            
            pst.setString(1, u.getName());
            pst.setString(2, u.getPassword());
    
            int rows= pst.executeUpdate();
    
            if (rows > 0){
                flag=true;
            }
            }catch(Exception ex){
                ex.printStackTrace();
            }finally{
                DBUtil.closeResource(conn, pst);
            }
            return flag;
            
        
    }

    @Override
    public User getUserByName(String username) {
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        User u = new User();
        String sql = "select * from user where username ="+"'"+username+"'";
        
            try {
                conn = DBUtil.getConnection();
            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        
        
        try {
        
            st = conn.createStatement();
            rs = st.executeQuery(sql);
            
            while(rs.next()){
                u.setName(rs.getString("username"));
                u.setPassword(rs.getString("password"));
            }
            } catch (SQLException e) {
                e.printStackTrace();
            }finally{
                DBUtil.closeResource(conn,st,rs);
            }
            return u;
            
    }

    @Override
    public boolean checkLogin(String username, String password) {
        
        boolean flag = false;
        User u = new User();
        u = getUserByName(username);

        if(u.getPassword().equals(password)) {
            flag = true;
        }
            return flag;
        }
}

    重写后的UserDaoImpl类:

package org.Impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

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.KeyedHandler;
import org.dao.UserDao;
import org.model.User;
import org.util.DBUtil;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class IUserDaoImpl implements UserDao {

    @Override
    public boolean addUser(User u) {
        
        boolean flag = false;
    
        QueryRunner runner = new QueryRunner(DBUtil.getDataSource());
        
        String sql="insert into user (username,password) values(?,?)";
        
        try {
            
            int rows = runner.update(sql , new String[]{u.getName(),u.getPassword()});
            if (rows > 0){
                flag=true;
            }
            
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return flag;            
    }
    
    @Override
    public User getUserByName(String username) {
        User u= new User();

        QueryRunner runner = new QueryRunner(DBUtil.getDataSource());
        
        String sql = "select * from user where username =?";

        try {
        
        u = runner.query(sql, new BeanHandler<User>(User.class),username );
        
        } catch (SQLException e) {
            
            e.printStackTrace();
        }
        return u;    
    }
    
    @Override
    public boolean checkLogin(String username, String password) {
        boolean flag = false;
        User u = new User();
        u = getUserByName(username);
    
        if(u.getPassword().equals(password)) {
            flag = true;
        }
            return flag;
        }
}

 

 
 
posted @ 2017-03-19 17:45  HPioneer  阅读(768)  评论(0编辑  收藏  举报