JDBC连接池

DBCP:Apache推出的Database Connection Pool

使用步骤:

> 添加jar包  commons-dbcp-1.4.jar  commons-pool-1.5.6.jar

l  创建DBCP连接池工具类

n  规范接口:javax.sql.DataSource接口

n  实现类:BasicDataSource, 重写接口中的方法getConnection()

使用读取配置文件的方式(加案例)

DBCP中有一个工厂类BasicDataSourceFactory

工厂类中有一个静态方法

static DataSource createDataSource(Properties prop)

此方法返回的就是DataSource接口的实现类对象BasicDataSource

创建Propertis集合+IO技术读取配置文件

把配置文件传入BasicDataSourceFactory静态方法createDataSource中

public class DBCPUtilsReadConfig {

private static DataSource dataSourse;

static{

try {

InputStream is = DBCPUtilsReadConfig.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");

//创建Propertis集合

Properties pro=new Properties();

pro.load(is);

//把配置文件传入BasicDataSourceFactory静态方法createDataSource中

dataSourse = BasicDataSourceFactory.createDataSource(pro);

} catch (Exception e) {

throw new RuntimeException("读取配置文件失败");

}

}

//创建获取数据库连接对象的方法

public static Connection getConnection(){

try {

return dataSourse.getConnection();

} catch (SQLException e) {

throw new RuntimeException(e+"连接数据库失败");

}

}

public static void  close(ResultSet rs,Statement stat,Connection conn){

if(rs!=null){

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if(stat !=null){

try {

stat.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if(conn != null){

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

C3P0连接池

C3P0开源免费的连接池!目前使用它的开源项目有:Spring、Hibernate等。使用第三方工具需要导入jar包,c3p0使用时还需要添加配置文件 c3p0-config.xml

创建C3P0连接池的工具类

连接的规范接口:javax.sql.DataSource接口

接口的实现类对象ComboPooledDataSource

成员位置创建ComboPooledDataSource对象

C3P0内部会自动扫描并解析xml文件,给ComboPooledDataSource设置数据量的4大连接信息

创建一个静态方法返回Connection对象

创建一个静态方法释放资源

publicclass C3P0UtilsReadXML {

privatestatic ComboPooledDataSource dataSource = new ComboPooledDataSource();

//使用静态代码块给ComboPooledDataSource设置4大数据量连接信息

/*static{

try {

dataSource.setDriverClass("com.mysql.jdbc.Driver");

dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mybase4");

dataSource.setUser("root");

dataSource.setPassword("root");

} catch (Exception e) {

throw new RuntimeException("设置连接信息失败!");

}

}*/

// 创建一个返回ComboPooledDataSource的方法

publicstatic DataSource getDataSource(){

returndataSource;

}

// 创建一个静态方法返回Connection对象

publicstatic Connection getConnection() {

try {

returndataSource.getConnection();

} catch (SQLException e) {

thrownew RuntimeException(e + "获取数据库连接失败");

}

}

// 定义一个释放资源的方法

publicstaticvoid close(ResultSet rs, Statement stat, Connection conn) {

if (rs != null) {

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if (stat != null) {

try {

stat.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

使用DBUtils工具类对数据库表进行增删改查

DBUtils工具类作用:简化JDBC的开发(6步)

DBUtils有3个核心类

1.QueryRunner:使用QueryRunner中的方法对数据库进行增删改查

2.DbUtils:提供了大量的释放资源的方法

3.ResultSetHandler接口:提供了处理查询结果集的方法

QueryRunner类

构造方法:

QueryRunner() 空参数构造方法

调用更新和查询方法的时候,需要传入Connection对象

QueryRunner(DataSource ds) 带DataSource数据库连接池的构造方法

调用更新和查询方法的时候QueryRunner会自动从DataSource实现类对象中获取数据库连接对象,使用完毕会自动归还

成员方法:

执行执行增删改的成员方法

int update(Connection conn, String sql, Object... params)用来执行增删改的SQL

int update(String sql, Object... params) 用来执行增删改的SQL

参数:

Connection conn:数据库连接对象

String sql:拼接的sql语句,可以使用?占位符

Object... params:?占位符的实际参数,可以使用Object[]

返回值:

int:执行的有效行数

执行执行查询的成员方法

<T> T query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)

<T> T query(String sql, ResultSetHandler<T> rsh, Object... params)

参数:

Connection conn:数据库连接对象

String sql:拼接的sql语句,可以使用?占位符

Object... params:?占位符的实际参数,可以使用Object[]

ResultSetHandler<T> rsh:用来存储查询之后的结果集,可以传入ResultSetHandler9种实现类对象

返回值:

<T> T:传入的ResultSetHandler实现类不同,返回的结果集也不同,使用泛型,传入什么结果集,就返回对应的类型

最新文章

  1. 《LoadRunner12七天速成宝典》签售会2016-12-17北京
  2. IntelliJ工程导入
  3. [U3D 导出Xcode工程包,用Xcode给U3D脚本传递参数]
  4. TFS与Eclipse、Microsoft Visual Studio等客户端以webservice进行交换。
  5. 分享基于EF+MVC+Bootstrap的通用后台管理系统及架构(转)
  6. 【Java】Socket+多线程实现控制台聊天室
  7. [译]GC专家系列1: 理解Java垃圾回收
  8. bigData Ecosystem Unscramble
  9. 【 D3.js 进阶系列 — 6.2 】 饼状图的拖拽
  10. html 商品展示框
  11. C#获取显示器宽度高度,桌面宽度高度等
  12. [BZOJ2324][ZJOI2011][最小费用最大流]营救皮卡丘
  13. AngularJS Change Path Without Reloading
  14. Gulp构建
  15. Swift 2.2 最基本的多线程
  16. 2.css字体单位
  17. JSON详细总结
  18. solr6.5.1搜索引擎的部署
  19. AVL平衡二叉树实现
  20. Java实现FTP批量大文件上传下载篇1

热门文章

  1. intellij idea 主题更换(换黑底或白底)
  2. qemu网络虚拟化之数据流向分析三
  3. PCI 设备详解一
  4. python包管理一防丢失
  5. Python面试应急5分钟!
  6. django 模板语言之 filter 自定义模板
  7. Spark踩坑记:Spark Streaming+kafka应用及调优
  8. flyweight模式
  9. 微信公众号JSAPI支付
  10. SuperObject使用