jdbc连接池java_JDBC连接池-自定义连接池

JDBC连接池

java JDBC连接中用到Connection   在每次对数据进行增删查改 都要 开启  、关闭  ,在实例开发项目中 ,浪费了很大的资源 ,以下是之前连接JDBC的案例

474b46ed70935cb52d4c7196ab5200cd.png

packagecom.jdbc.connection;importjava.io.IOException;importjava.io.InputStream;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.Properties;public classjdbcConnection {private staticString driver;private staticString url;private staticString username;private staticString password;/*** 静态代码块加载配置文件信息*/

static{try{//1.通过当前类获取类加载器

ClassLoader classLoader = jdbcConnection.class.getClassLoader();//2.通过类加载器的方法获得一个输入流

InputStream is = classLoader.getResourceAsStream("db.properties");//3.创建一个properties对象

Properties props = newProperties();//4.加载输入流

props.load(is);//5.获取相关参数的值

driver = props.getProperty("driver");

url= props.getProperty("url");

username= props.getProperty("username");

password= props.getProperty("password");

}catch(IOException e) {

e.printStackTrace();

}

}/*** 获取连接方法

**/

public staticConnection getConnection() {

Connection conn= null;try{

Class.forName(driver);

conn=DriverManager.getConnection(url, username, password);

}catch(Exception e) {

e.printStackTrace();

}returnconn;

}/*** 释放资源方法

*

*@paramconn

*@parampstmt

*@paramrs*/

public static voidrelease(Connection conn, PreparedStatement pstmt, ResultSet rs) {if (rs != null) {try{

rs.close();

}catch(SQLException e) {

e.printStackTrace();

}

}if (pstmt != null) {try{

pstmt.close();

}catch(SQLException e) {

e.printStackTrace();

}

}if (conn != null) {try{

conn.close();

}catch(SQLException e) {

e.printStackTrace();

}

}

}

}

考虑节省资源  ,可以创建一个connection连接池 ,每次使用connection连接时 ,直接从连接池中取出一个连接,不用时再放回连接池 ,代替之前的关闭连接  。  java提供了javax.sql.DataSource 接口 ,各大连接池厂商直接实现这个接口

常见的连接池有C3P0  DBCP连接池

自定义连接池

在上面代码的基础上添加一个自定义连接池,减少对资源的浪费

1.创建一个类实现javax.jdbc.dataSource 类

411f18a32664890fc728bed59ed340fb.png

2.创建一个 存放多个连接的容器 ,因为需要经常删除 ,查找  。 这里用LinkedList   容器

5a84b9caae291b88701fdb76a017b38c.png

3.在MyDataSource类中静态代码块中创建多个连接,添加到连接池容器中  (这里面创建连接可以直接使用 com.jdbc.connection包中的jdbcConnection 中的静态方法getConnection)

1 static{2 for (int i = 0; i < 5; i++) {3 Connection conn=jdbcConnection.getConnection();4

5 }6 }

4.重写Datasource 方法中的 getConnection()  方法    ,

ccc8ed722c2d7f424dc498fba6879b18.png

注:在使用pool这个变量之前需要判断pool是否为空 ,若为空需要重新创建

4.在MyDataSource方法中添加  一个 把当前连接归还给连接池的方法

public voidaddBack(Connection conn){

pool.add(conn);

}

具体操作代码如下

packagecom.jdbc.dataSource;importjava.io.PrintWriter;importjava.sql.Connection;importjava.sql.SQLException;importjava.sql.SQLFeatureNotSupportedException;importjava.util.LinkedList;importjava.util.logging.Logger;importjavax.sql.DataSource;importcom.jdbc.connection.jdbcConnection;public class MyDataSource implementsDataSource {private static LinkedList pool=new LinkedList

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值