DBUtils
简化开发的冗余代码
QueryRunner中提供SQL语句操作API
ResultSetHandler接口,用于定义select操作后怎样处理结果集
DBUtils对于一切事物的关闭类
是线程安全的
事务
转账操作
将对个Sql操作封装成一个事务对象,它有返回值,执行成功就返回ture,否者返回false.然后对事务进行回滚(rollback)不破坏原有数据
public static int update(Connection con,String sql,Object...Para)
QueryRunner
QueryRunner类的query方法
public T query
(Connection con,String sql,ResultSetHandler r,Object...params)
public static void insert(){
QueryRunner qr = new QueryRunner();
String sql =
"INSERT INTO sort (sname,pass,desc)VALUE(?,?,?)"
Object[] params = {"xxxx",123,"xxxx"};
int row = qr.update(con,sql,params);
DbUtils.closeQuiety(con);
}
public static void delete(){
}
ResultSetHandler
结果集处理接口,对所有的查询结果数据的处理类,每一种对应的实现类就是一种结果的处理方式
Function
describle
ArrayHandler
将结果集封装到Object[]数组中每个元素就是一个字段的值
ArrayListHandler
将结果的每一条记录封装搭配Object[]中,在封装到List中
将结果集中的第一条记录封装到指定JavaBean中
BeanListHandler
将结果的每条记录封装到JavaBean中,在封装到List中
ColumnListHandler
将结果集中指定的列的字段值封装到List中
ScalarHandler
用于单数据如:SELECT count(*) FROM 'table'
MapHandler
MapListHandler
既是以各种不同的方式来处理结果
ArrayHandler
//将结果集的第一行存储到对象数组中Object[]
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
//调用方法的query
Objcet[] objs = qr.query(con,sql,new ArrayHandler());
//遍历查询结果
for(Object[] obj:objcs){
//TODO
}
ArrayListHandler
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
List results =
qr.query(con,sql,new ArrayListHandler());
for(Object[] objs:results){
for(Object obj:objs){
//TODO
}
}
==BeanHandler==
实现BeanHandler的构造传入的类必须用空参的构造器
//不管数据有多少只把第一行封装到bean对象
QueryRunner qr = newe QueryRunner();
String sql = "SELETE * FROM sort";
//BeanHandler没有空参构造器
//public BeanHandler(Class c)传递Sort类的class文件对象
Sort s = qr.query(con,sql,new BeanHandler(Sort.class));
//如果没有这个结果集那么被封装到Bean的对象就是null
==BeanListHandler==
//将结果集的每一行封装到JavaBean对象
QueryRunner qr = new QueryHandler();
String sql = "";
List list =
qr.query(con,sql,new BeanListHandler(Sort.class));
for(Sort s : list){
//TODO
}
ColumnListHandler
//将指定的列的数据封装到List集合
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
//在column中要拿那一列就要在sql语句中有体现
List list =
qr.query(con,sql,new ColumnListHandler("columnName"));
for(Object obj : list){
//TODO
}
ScalerHandler
对于查询以后只有一个结果的查询适用
QueryRunner qr = new QueryRunner();
String sql = "SELECT count(*) FROM sort";
//必须保证结果的类型是确定的才可以确定类型,否者都是Object
Object obj = qr.query(con,sql,new ScalerHandler);
MapHandler
QueryHandler qr = new QueryHandler();
String sql = "SELECT * FROM sort";
//返回值:map集合,Map接口的实现类。泛型
Map map = qr.query(con,sql,new MapHandler())
for(Object obj : map){
//TODO
}
MapListHandler
QueryHandler qr = new QueryHandler();
String sql = "SELECT * FROM sort";
List> list = qr.query(con,sql,new MapListHandler());
for(Map map :list){
for(String key : map.getKey()){
map.getValue(key);
}
}
连接池
如果操作连接与释放资源操作就会占用大量的资源,特别是对于多用户连接访问的网络程序
规范:数据源的连接池都是由第三方提供,但是不管是谁提供都的实现javax.sql.DataSource
DBCP
Tomcat:java的web服务器,内置了一个连接池,把我们写好的class文件放在Tomcat中,在运行是,Tomcat会监听端口。
所以开发一个交互数据库项目需要很多的jar包的支持
commons-dbcp.jar
commons-dbutils.jar
commons-pool.jar
mysql-connector-java-bin.jar