DBpool--单例

共计两个类:

 

类1:

 

package com.java7.util;

import java.io.IOException;

 

import snaq.db.ConnectionPoolManager;

 

 

public class MyCPM {

private static final MyCPM mycpm = new MyCPM();

private static  ConnectionPoolManager cpm = null;

static{

try {

cpm = ConnectionPoolManager.getInstance("/dbpool.properties");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}  

}

private MyCPM() {

}

 

public static MyCPM getInstance() {

        return mycpm;

    }

    public static ConnectionPoolManager getCPM(){

     return cpm;

    }

    public static void release(){

     cpm.release();

    }

}

类2:
package com.java7.util;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DB {
public static Connection getConn(){
Connection conn = null;
try {
if(conn == null)
conn = MyCPM.getCPM().getConnection("pooltest");
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static PreparedStatement getPstmt (Connection conn, String sql){
PreparedStatement pstmt = null;
try {
if (conn != null) {
pstmt = conn.prepareStatement(sql);
}
} catch (SQLException e) {
e.printStackTrace();
}
return pstmt;
}
public static PreparedStatement getPstmt(Connection conn , String sql , int autoGeneratedKeys) {
PreparedStatement pstmt = null;
try {
if(conn != null) {
pstmt = conn.prepareStatement(sql, autoGeneratedKeys);
}
}catch (SQLException e) {
e.printStackTrace();
}
return pstmt;
}
public static Statement getStmt (Connection conn) {
Statement stmt = null;
try {
if(conn != null) {
stmt = conn.createStatement();
}
}catch(SQLException e) {
e.printStackTrace();
}
return stmt;
}
public static ResultSet getRs (Statement stmt ,String sql) {
ResultSet rs = null;
try{
if(stmt != null) {
rs = stmt.executeQuery(sql);
}
}catch(SQLException e) {
e.printStackTrace();
}
return rs;
}
public static void executeUpdata(Statement stmt ,String sql) {
try {
if(stmt != null) {
stmt.executeUpdate(sql);
}catch(SQLException e) {
e.printStackTrace();
}
}
public static void Close(Connection conn) {
try{
if(conn != null) {
conn.close();
}
}catch(SQLException e) {
e.printStackTrace();
}
}
public static void Close(Statement stmt) {
try {
if(stmt != null) {
stmt.close();
}
}catch(SQLException e) {
e.printStackTrace();
}
}
public static void Close(ResultSet rs) {
try {
if(rs != null) {
rs.close();
}
}catch(SQLException e) {
e.printStackTrace();
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在多线程中使用 `psycopg2.pool`,需要创建一个连接池对象并将其传递给每个工作线程。在每个工作线程中,可以从连接池中获取一个连接对象,使用该连接对象执行数据库操作,然后将该连接对象归还给连接池。 以下是一个示例代码,展示如何在多线程中使用 `psycopg2.pool`: ```python import psycopg2 from psycopg2 import pool import threading class DBPool: def __init__(self, minconn, maxconn, **kwargs): self._pool = psycopg2.pool.SimpleConnectionPool(minconn, maxconn, **kwargs) def getConnection(self): return self._pool.getconn() def releaseConnection(self, conn): self._pool.putconn(conn) def worker(dbpool): conn = dbpool.getConnection() # 使用连接对象执行数据库操作 conn.cursor().execute('SELECT * FROM mytable') dbpool.releaseConnection(conn) dbpool = DBPool(1, 10, host='localhost', database='mydb', user='myuser', password='mypassword') threads = [] for i in range(10): t = threading.Thread(target=worker, args=(dbpool,)) threads.append(t) t.start() for t in threads: t.join() dbpool._pool.closeall() ``` 在上面的示例中,我们首先定义了一个 `DBPool` 类,该类封装了 `psycopg2.pool.SimpleConnectionPool` 对象,并提供了获取连接和释放连接的方法。在 `worker` 函数中,我们从连接池中获取一个连接对象,使用该连接对象执行数据库操作,然后将其归还给连接池。最后,我们创建了10个工作线程,并将连接池对象传递给每个线程。每个线程都会从连接池中获取一个连接对象,使用该连接对象执行数据库操作,然后将其归还给连接池。 需要注意的是,当使用 `psycopg2.pool` 连接池时,需要在每个线程中获取连接对象,并在使用完毕后将其归还给连接池。如果不归还连接对象,那么连接池中的连接将会被耗尽,从而导致连接失败。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值