您的位置:首页 > 编程语言 > Java开发

java基础专栏—DBUtils(2)

2017-10-20 00:00 127 查看
摘要: 笔者在java学习的这条道路上也是断断续续走了一年多了,视频啊,书籍啊什么的也看了好几遍了,真的是java从入门到放弃啊,哈哈,看的多了一渐渐的明白了一点东西,笔者整理了一些自己的学习笔记,在此与大家分享,不喜勿喷,多多指教,万分感谢。

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

​ 结果集处理接口,对所有的查询结果数据的处理类,每一种对应的实现类就是一种结果的处理方式

Functiondescrible
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<Object[]> 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>(Sort.class));
//如果没有这个结果集那么被封装到Bean的对象就是null

==BeanListHandler==

//将结果集的每一行封装到JavaBean对象
QueryRunner qr = new QueryHandler();
String sql = "";
List<Sort> list =
qr.query(con,sql,new BeanListHandler<Sort>(Sort.class));
for(Sort s : list){
//TODO
}

ColumnListHandler<T>

//将指定的列的数据封装到List集合
QueryRunner qr = new QueryRunner();
String sql = "SELECT * FROM sort";
//在column中要拿那一列就要在sql语句中有体现
List<Object> list =
qr.query(con,sql,new ColumnListHandler<Object>("columnName"));
for(Object obj : list){
//TODO
}

ScalerHandler<T>

​ 对于查询以后只有一个结果的查询适用

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<String,Object> map = qr.query(con,sql,new MapHandler())
for(Object obj : map){
//TODO
}

MapListHandler

QueryHandler qr = new QueryHandler();
String sql = "SELECT * FROM sort";
List<Map<String,Object>> list = qr.query(con,sql,new MapListHandler());
for(Map<String,Object> 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息