java jdbc 连接池

经常使用hibernate,在使用hibernate的时候经常使用到DBCP和C3P0的连接池,某天自己突然想起自己来实现一个连接池。test了下,效果还可以,随记录之

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Stack;


public class ConnManager {

private static final int MIN_CONN = 2;
private static final int MAX_CONN = 5;
private static final String URL = "jdbc:sqlserver://localhost:1433;DatabaseName=RJ_Thesis";
private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String USER ="sa";
private static final String PASW= "sa";

private int connAmount = 0;
private static Stack<Connection> connStack ;

static {
connStack = new Stack<Connection>();
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

private static ConnManager instance;


public static synchronized ConnManager getInstance(){
if(null != instance){
return instance;
}
return new ConnManager();
}


private ConnManager(){
for(int i = 0 ; i < MIN_CONN ; i++){
connStack.push(newConnection());
}
}


public synchronized void freeConnection(Connection con){
connStack.push(con);
notifyAll();
}

public synchronized Connection getConnection(){
Connection con = null;
if(!connStack.isEmpty()){
con = connStack.pop();
}else if(connAmount < MAX_CONN){
con = newConnection();
}else{
try {
wait(1000);
return getConnection();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return con;
}

private Connection newConnection(){
try {
Connection connection = DriverManager.getConnection(URL, USER, PASW);
++connAmount;
return connection;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个简单的基于JavaJDBC连接池示例。它使用了一个Vector来存储连接对象。在对象池初始化时,它会创建一定数量的连接对象。在需要使用连接时,它会从对象池中获取一个连接对象,使用完毕后将其返回给对象池。 ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Vector; public class JDBCConnectionPool { private String url, username, password, driverClassName; private int maxConnections; private Vector<Connection> connectionPool; public JDBCConnectionPool(String url, String username, String password, String driverClassName, int maxConnections) { this.url = url; this.username = username; this.password = password; this.driverClassName = driverClassName; this.maxConnections = maxConnections; connectionPool = new Vector<Connection>(); } public synchronized Connection getConnection() { Connection connection = null; if (connectionPool.size() > 0) { connection = connectionPool.remove(0); } else { connection = newConnection(); } return connection; } public synchronized void returnConnection(Connection connection) { if (connection != null && connectionPool.size() < maxConnections) { connectionPool.add(connection); } else { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } private Connection newConnection() { Connection connection = null; try { Class.forName(driverClassName); connection = DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return connection; } } ``` 示例用法: ```java JDBCConnectionPool pool = new JDBCConnectionPool( "jdbc:mysql://localhost:3306/mydb", "root", "password", "com.mysql.jdbc.Driver", 10); Connection connection = pool.getConnection(); // Use connection... pool.returnConnection(connection); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值