DBUtils、连接池
1.DBUtils
它是JDBC的简化开发工具包
需项目导入commons-dbutils-1.6.jar
3个核心功能:
- QuerryRunner:提供对SQL语句操作的API
- ResultSetHandler:接口,用于定义select操作后,怎样封装结果集
- DBUtils类:一个工具类,定义了关闭资源与事务处理的方法
2.QuerryRunner
update(Connection conn,String sql,Object...params):用于完成表数据的增删改;
query(Connection conn,String sql,ResultSetHandler<T> rsh,params):用于完成表数据的查询操作
2.1添加
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="INSERT INTO zhangwu(name,money,parent VALUES(?,?,?))";Object[] params={"股票收入","5500","收入"};//分别对应3个?Connextion xonn=JDBCUtils.getCOnextion();int line=qr.update(conn,sql,params);System.out.println("line"+line);}catch(SQLException e){throw new RuntimeException(e);}
}
2.2更新
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="UPDATE zhangwu SET money=money+1000 WHERE name=?";Object[] params={"股票收入"};Connextion xonn=JDBCUtils.getCOnextion();int line=qr..update(conn,sql,params);System.out.println("line"+line);}catch(SQLException e){throw new RuntimeException(e);}
}
2.3删除
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="DELETE FROM zhangwu WHERE name=?";Object[] params={"股票收入"};Connextion conn=JDBCUtils.getCOnextion();int line=qr..update(conn,sql,params);System.out.println("line"+line);}catch(SQLException e){throw new RuntimeException(e);}
}
2.4查询
ResultSetHandler结果集处理类
2.4.1 ArrayHandler
将结果集中的第一条记录封装到一个Object[ ]数组中,数组中的每个元素就是这条记录中的每一个字段的值。
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="SELECT * FROM zhangwu";Object params={};Connextion conn=JDBCUtils.getCOnextion();Object[] objArray=qr.query(conn,sql,new ArrayHandler(),params);System.out.println(Arrays.toString(objArray));}catch(SQLException e){throw new RuntimeException(e);}
}
2.4.2 ArrayListHandler
将结果集中的每一条记录封装到一个Object[ ]数组中,然后将这些数组在封装到List集合中。
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="SELECT * FROM zhangwu WHERE money=?";Object params={2000};Connextion conn=JDBCUtils.getCOnextion();List<Object[]> list=qr.query(conn,sql,new ArrayListHandler(),params);for(Object[] arr:list){System.out.println(Arrays.toString(objArray));}}catch(SQLException e){throw new RuntimeException(e);}
}
2.4.3 BeanHandler
将结果集中的第一条记录封装到一个JavaBean中。
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="SELECT * FROM zhangwu WHERE money=?";Object params={2000};Connextion conn=JDBCUtils.getCOnextion();zhangwu zw=qr.query(conn,sql,new BeanHandler<zhangwu>(zhangwu.class),params);System.out.println(zw);}catch(SQLException e){throw new RuntimeException(e);}
}
- JavaBean:是一种Java语言写成的可重用组件。(http://www.runoob.com/jsp/jsp-javabean.html)
- 为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。
- 特点:
- 提供一个默认的无参构造函数。
- 需要被序列化并且实现了Serializable接口。
- 可能有一系列可读写属性(私有字段:private 类型 字段名)
- 可能有一系列的"getter"或"setter"方法
- 属性:
- 一个JavaBean对象的属性应该是可访问的。这个属性可以是任意合法的Java数据类型,包括自定义Java类。
- 一个JavaBean对象的属性可以是可读写,或只读,或只写。JavaBean对象的属性通过JavaBean实现类中提供的两个方法来访问:
getPropertyName() |
举例来说,如果属性的名称为myName,那么这个方法的名字就要写成getMyName()来读取这个属性。这个方法也称为访问器。 |
setPropertyName() | 举例来说,如果属性的名称为myName,那么这个方法的名字就要写成setMyName()来写入这个属性。这个方法也称为写入器。 |
- 示例:
public class StudentsBean implements java.io.Serializable{private String name = null;private int age = 0;public StudentsBean() {}public String getName(){return name;}public int getAge(){return age;}public void setName(String name){this.name = name;}public void setAge(int age) {this.age = age;}
}
2.4.4 BeanListHandler
将结果集中的每一条记录封装到一个JavaBean中。再将这些JavaBean封装到List集合中。
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="SELECT * FROM zhangwu WHERE money=?";Object params={2000};Connextion conn=JDBCUtils.getCOnextion();List<zhangwu> list=qr.query(conn,sql,new BeanListHandler<zhangwu>(zhangwu.class),params);for(zhangwu zw:list){System.out.println(zw);}}catch(SQLException e){throw new RuntimeException(e);}
}
2.4.5 ColumnListHandler
将结果集中指定的列的字段值封装到一个List集合中。
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="SELECT * FROM zhangwu WHERE money=?";Object params={2000};Connextion conn=JDBCUtils.getCOnextion();List<String> list=qr.query(conn,sql,new ColumnListHandler<String>(zhangwu.class),params);for(String str:list){System.out.println(str);}}catch(SQLException e){throw new RuntimeException(e);}
}
2.4.6 ScalerHandler
用于单数据,eg. select count(*) from user。
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="SELECT MAX(money) FROM zhangwu";Object params={};Connextion conn=JDBCUtils.getCOnextion();Double max=qr.query(conn,sql,new ScalarHandler<Double>(),params);System.out.println("max="+max);}catch(SQLException e){throw new RuntimeException(e);}
}
2.4.7 MapHandler
将结果集中第一行数据封装到Map集合中,key列名,value该列数据。
2.4.8 MapListHandler
将结果集的每一行封装到一个Map中,再将这些Map封装到List中。
3.连接池
用池管理连接Connection,以达到复用Connection的目的。
不用自己创建,通过池来获取Connection对象。
调用Connection的close()方法,并不会关闭Connection,而是将它还给池,池可再分配它。
javax.sql.DataSource
Java为数据库连接池提供的公共接口。
各个厂商应让自己的连接池实现这个接口,以便应用程序可以方便切换不同厂商的连接池。
常见的连接池:DBCP、C3PO
3.1DBCP
tomcat内置的连接池。
导入jar包。
commons-dbcp-1.4.jar
commons-pool-1.5.6.jar
DataSource:java提供的连接池规则接口,作为DriverManager工具的替代项。
在DBCP中提供了其实现类:BasicDataSource
创建连接池
public static BasicDataSource datasource=new BasicDataSource();public static final String DRIVERNAME="com.mysql.jdbc.Driver";public static final String URL="JDBC:MYSQL://LOCALHOST:3306/mydb";public static final String USERNAME="root";public static final String PAEEWORD="root";static{datasource.serDriverClassName(DRIVER);datasource.setUrl(URL);datasource.setUsername(USERNAME);datasource.sePassword(PASSWORD);
}
返回连接池对象
public static DataSource getDataSource{return datasource;
}
使用
public void insert(){try{QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());String sql="INSERT INTO zhangwu (name,monet,parent) VALUES(?,?,?);Object[] params={"股票交易","5500","收入"};int line=qr.update(sql,params);//没有conn这个参数了System.out.println("line="+line);}catch(SQLException E){throw new RuntimeException(e);}
}
public void search(){try{QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());String sql="INSERT INTO zhangwu (name,monet,parent) VALUES(?,?,?);Object[] params={"股票交易","5500","收入"};Product p=qr.query(sql,new BeanHandler<Product>(Product.class),params);System.out.println("line="+line);}catch(SQLException E){throw new RuntimeException(e);}
}
常见配置项
必须项
- driverClassName
- url
- username
- password
基本项(扩展)
- maxActive:最大连接数量
- minIdle:最小空闲连接
- maxIdle:最大空闲连接
- initialsize:初始化连接
DBUtils、连接池相关推荐
- DBUtils连接池,websocket
1.mysql数据库连接池 概念:数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放. 这样 ...
- python - DBUtils 连接池减少oracle数据库的连接数
问题: 接到需求,告知项目的oracle连接次数过多,对系统造成太过大的负担,要求减少oracle数据库的连接次数 分析: 仔细分析代码以后,发现产生问题的原因,在于之前要求提升oracle监控的监控 ...
- python oracle连接池_python - DBUtils 连接池减少oracle数据库的连接数
问题: 接到需求,告知项目的oracle连接次数过多,对系统造成太过大的负担,要求减少oracle数据库的连接次数 分析: 仔细分析代码以后,发现产生问题的原因,在于之前要求提升oracle监控的监控 ...
- python调用libs.dbutil_Python 使用 PyMysql、DBUtils 创建连接池,提升性能
Python 编程中可以使用 PyMysql 进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接 MySQL 数据库请求时,都是独立的去请求访问,相当浪费资源,而且访问数量达到一定数量时,对 ...
- 满汉楼(德鲁伊连接池+DBUtils+DAO+Mysql)保姆级别分析+代码实现
一:需求 1.完成一个酒店后台管理系统,当然只是模拟,在控制台就行模拟 2.实现管理人员的登录和酒店成本账单的查看,以及正常的点餐,结账和查看账单等等功能 二:实现的功能展示 1.用户登录(这里输入的 ...
- mysql连接池_数据库技术:数据库连接池,Commons DbUtils,批处理,元数据
Database Connection Pool Introduction to Database Connection Pool 实际开发中"获得连接"或"释放资源&q ...
- dbcp连接池配置详解_JDBC第四篇【数据库连接池、DbUtils框架、分页】(修订版)
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 1.数据库连接池 什么是数据库连接池 简单来说:数据 ...
- [Day30] DBUtils和连接池
1. DBUtils-JDBC的简化开发工具包 1.1 概述 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码 ...
- JDBC连接池和DBUtils
本节内容: JDBC连接池 DBUtils 一.JDBC连接池 实际开发中"获得连接"或"释放资源"是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况 ...
最新文章
- 使用Docker搭建svn服务器教程
- FPGA最全科普总结
- Yann LeCun力挺前AAAI主席,批判深度学习的Marcus遭怒怼
- 蓝桥杯:基础练习 杨辉三角形
- 《美团网编程题》奇数位丢弃
- 隐藏search parameter在configuration tab里不相关的field
- Axios 如何缓存请求数据?
- mysql之union合并查询
- 学习使用RIA Framework Flex创建MySQL管理UI(初学Flex实例教程)
- VUE 调试神器 vue-devtools
- Ascll完整码表(256个)
- mysql批量导出工具_sql数据库批量导出|
- 怎样设置默认浏览器,绝对干货!
- android平板能玩吃鸡吗,刺激战场用什么平板好 平板吃鸡配置推荐
- ssm基于微信小程序的恋上诗词设计与实现毕业设计源码011431
- B端产品的特点及开发经验
- Pycharm和Pytorch安装教程配置环境以及遇到的问题:
- SM2RAIN-ASCAT全球规模降雨产品数据集(2007年-2020年6月)
- Spring自动注入(引用类型)
- 软件设计中的csc_通用集中监控中心CSC解决方案