DBUtils 简介
核心类包括org.apache.commons.dbutils.Dbutils、org.apache.commons.dbutils.QueryRunner、org.apache.commons.dbutils.ResultSetHandler。
Dbutils类主要 为关闭数据库连接,装载JDBC驱动等提供方法,且方法都是静态方法。
QueryRunner类主要是简化了执行sql语句的代码。
ResultSetHandler接口用于处理ResultSet结果集,可以将结果集中的数据转化为任何形式的数据,主要我们使用的是它的实现类
常用API
1、Dbutils类
主要是关闭数据库连接的方法和加载JDBC驱动的方法,close()、closeQuietly(Connection conn,Statement stmt,ResultSet rs),commitAndCloseQuietly(Connection conn),loadDriver(java.lang.String driverClassName)。
2、QueryRunner类
包含一个默认的构造方法和一个带javax.sql.DatSource类型的参数的构造方法(可以建立C3P0的ComboPooledDataSource()的数据源,用QueryRunner中的带参的构造方法来创建和关闭连接)
query(Connection conn,String sql,ResultSetHandler rsh,Object[] params);
query(String sql, ResultSetHandler rsh,Object[] params);
query(Connection conn,String sql,ResultSetHandler rsh);
update(Connection conn,String sql, Object[] params);
update(Connection conn,String sql);
3、ResultSetHandler的实现类
ArrayHandler和ArrayListHandler,BeanHandler、BeanListHandler和BeanMapHandler,MapHandler和MapListHandler,ColumnListHandler,ScalarHandler,KeyedHandler
DBUtils简单的例子
1、先建立C3P0的获取数据源的工具类
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3p0Utils {
private static DataSource ds;
static{
ds=new ComboPooledDataSource();
}
public static DataSource getDataSouce(){
return ds;
}
}
2、建立操作类
public class DBUtilsDao {
//查询所有,返回list集合
public List findAll() throws SQLException{
//创建QueryRunner对象,调用其类中带参的方法,将数据源传给queryRunner方法,
//让它为我们创建连接和关闭连接
QueryRunner runner=new QueryRunner(C3p0Utils.getDataSouce());
//编写sql语句
String sql="select *from users";
//调用方法,得到所有的bean对象
List list=(List)runner.query(sql, new BeanListHandler(User.class));
return list;
}
//根据user的ID查询单个对象,返回对象
public User findById(int id) throws SQLException{
//创建QueryRunner对象
QueryRunner runner=new QueryRunner(C3p0Utils.getDataSouce());
//编写sql语句
String sql="select *from users where id=?";
//调用方法
User user=runner.query(sql, new BeanHandler(User.class),new Object[]{id});
return user;
}
//添加用户的操作
public boolean insert(User user) throws SQLException{
//创建QueryRunner对象
QueryRunner runner=new QueryRunner(C3p0Utils.getDataSouce());
//编写sql语句
String sql="insert into users(username,password,email,birthday)values(?,?,?,?)";
//SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd");
//String birthday=sdf.format(user.getBirthday());
//调用方法
int num=runner.update(sql, new Object[]{
user.getUsername(),
user.getPassword(),
user.getEmail(),
user.getBirthday()
});
if(num>0)
return true;
return false;
}
//修改用户的操作
public boolean update(User user)throws SQLException{
//创建QueryRunner对象
QueryRunner runner=new QueryRunner(C3p0Utils.getDataSouce());
//编写sql语句
String sql="update users set username=?,password=?,email=?,birthday=?";
//SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd");
//String birthday=sdf.format(user.getBirthday());
//调用方法
int num=runner.update(sql, new Object[]{
user.getUsername(),
user.getPassword(),
user.getEmail(),
user.getBirthday()
});
if(num>0)
return true;
return false;
}
//删除用户的操作
public boolean delete(int id)throws SQLException{
//创建QUeryRunner对象
QueryRunner runner=new QueryRunner(C3p0Utils.getDataSouce());
//编写sql语句
String sql="delete from users where id=?";
//调用方法
int num=runner.update(sql, id);
if(num>0)
return true;
return false;
}
}
3、简单测试
public class DBUtilsDaoTest1 {
private static DBUtilsDao dao=new DBUtilsDao();
public static void testInsert() throws SQLException{
User user=new User();
user.setUsername("huahua");
user.setPassword("12334");
user.setEmail("huahua@123.com");
user.setBirthday(new Date());
boolean b=dao.insert(user);
System.out.println(b);
}
public static void main(String[] args) throws SQLException{
// TODO Auto-generated method stub
testInsert();
//testUpdate();
}
}