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