`
TRAMP_ZZY
  • 浏览: 137778 次
社区版块
存档分类
最新评论

Jdbc 数据库连接池简易实现和JdbcUtils

阅读更多
public class MyDataSource {
	
	private static String url = "jdbc:mysql://localhost:3306/riverevaluationsys";
	private static String user = "root";
	private static String password = "root";
	
	private static int initCount = 5;
	private static int maxCount = 20;
	private int currentCount = 0;
	
	private LinkedList<Connection> connectionsPool = new LinkedList<Connection>();
	
	public MyDataSource() {
		try {
			for (int i=0; i<5; i++) {
				this.connectionsPool.add(this.createConnection());
				this.currentCount++;
			}
		} catch (SQLException e) {
			throw new ExceptionInInitializerError(e);
		}
	}
	
	public Connection getConnection() throws SQLException {
		// 添加同步锁
		synchronized (connectionsPool) {
			if (this.connectionsPool.size() > 0) {
				return this.connectionsPool.removeFirst();
			} else {
				if (this.currentCount < maxCount) {
					this.currentCount++ ;
					return this.createConnection();
				} else {
					throw new SQLException("no more connection.");
				}
			}
		}
	}
	
	public void free(Connection conn) {
		this.connectionsPool.addLast(conn);
	}
	
	private Connection createConnection() throws SQLException {
		return DriverManager.getConnection(url, user, password);
	}
}
 

public class JdbcUtils {
	
	/*private static String url = "jdbc:mysql://localhost:3306/riverevaluationsys";
	private static String user = "root";
	private static String password = "root";*/
	
	private static MyDataSource myDataSource ;
	
	// 装入虚拟机,立即执行
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			myDataSource = new MyDataSource();
		} catch (ClassNotFoundException e) {
			throw new ExceptionInInitializerError(e);
		}
	}
	
	/**
	 * 
	 * getConnection:<br />
	 * 获取数据库的连接
	 *
	 * @author zhangzhaoyu
	 * @return
	 * @throws SQLException
	 */
	public static Connection getConnection() throws SQLException {
		//return DriverManager.getConnection(url, user, password);
		return myDataSource.getConnection();
	}
	/**
	 * 
	 * close:<br />
	 * 关闭资源
	 *
	 * @author zhangzhaoyu
	 * @param conn
	 * @param rs
	 * @param st
	 */
	public static void close(Connection conn, ResultSet rs, Statement st) {
		
		 try {  
	            if (rs != null)  
	                rs.close();  
	        } catch (SQLException e) {  
	            e.printStackTrace();  
	        } finally {  
	            try {  
	                if (st != null)  
	                    st.close();  
	            } catch (SQLException e) {  
	                e.printStackTrace();  
	            } finally {  
	            	try {  
                        myDataSource.free(conn); 
                    } catch (Exception e) {  
                        e.printStackTrace();  
                    } 
	            }  
	        }  
	}
	
	/**
	 * 
	 * close:<br />
	 * 关闭数据库重载函数
	 *
	 * @author zhangzhaoyu
	 * @param conn
	 * @param rs
	 * @param pst
	 */
	public static void close(Connection conn, ResultSet rs, PreparedStatement pst) {
		
		 try {  
	            if (rs != null)  
	                rs.close();  
	        } catch (SQLException e) {  
	            e.printStackTrace();  
	        } finally {  
	            try {  
	                if (pst != null)  
	                	pst.close();  
	            } catch (SQLException e) {  
	                e.printStackTrace();  
	            } finally {  
	                if (conn != null)  
	                    try {  
	                        myDataSource.free(conn); 
	                    } catch (Exception e) {  
	                        e.printStackTrace();  
	                    }  
	            }  
	        }  
	}
	
	/**
	 * 
	 * close:<br />
	 * 关闭资源
	 *
	 * @author zhangzhaoyu
	 * @param conn
	 * @param pst
	 */
	public static void close(Connection conn, PreparedStatement pst) {
		
		    try {  
		        if (pst != null)  
		        	pst.close();  
		    } catch (SQLException e) {  
		        e.printStackTrace();  
		    } finally {  
		        if (conn != null)  
		        	try {  
                        myDataSource.free(conn); 
                    } catch (Exception e) {  
                        e.printStackTrace();  
                    } 
		    }  
	 }  
}
分享到:
评论

相关推荐

    基于德鲁伊(Druid)数据库连接池的一个JDBCUtils工具类。

    实现数据库的连接和释放

    JDBC数据库连接工具类

    数据库连接池会在应用启动时预先创建一定数量的连接,当需要时直接提供,用完后归还而不是关闭,从而减少了数据库连接的创建和关闭次数。 总的来说,JDBC数据库连接工具类是Java开发中的一个重要组件,它封装了...

    连接池驱动包c3p0,DBCP,dbutils,druid-1.0.9

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的核心功能包括连接池管理和自动管理数据库连接。它的主要优点是能够自动检测并修复失效的连接,同时提供了灵活的...

    阿里巴巴数据库连接池完整demo

    除了基本的配置,我们还可以根据需求添加更多的特性,例如配置SQL执行拦截器以实现更细粒度的控制,或者使用Druid提供的WebStatFilter和StatViewServlet来搭建一个简单的监控页面,实时查看数据库连接池的运行状态。...

    自定义一个简单的JDBC连接池实现方法

    JDBC连接池是一种优化数据库连接的方法,在传统的JDBC连接中,每次获得一个Connection连接都需要加载通过一些繁杂的代码去获取,这样繁杂的操作只为了获取一次连接,当然,我们可以将其封装成一个工具类来访问,但是...

    java数据库连接池和数据库连接示例

    在上述示例中,使用了C3P0连接池库来实现数据库连接池的功能。C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。下面将详细解释这段代码的工作原理以及数据库连接池的相关...

    JDBCUtils应用Durid连接池

    JDBCUtils应用Durid连接池...

    javaBean自动生成工具,jdbc连接池封装

    综上所述,这个压缩包提供的JavaBean自动生成工具和JDBC连接池封装工具,能够显著提升数据库驱动的Java应用的开发效率和性能,减少程序员的工作量,使得数据库操作更加便捷和高效。对于处理大量数据库操作的项目,...

    JDBC数据库访问工具类 强大 精巧 高效

    1. **连接池管理**:通过集成像C3P0、HikariCP或Apache DBCP这样的连接池库,实现数据库连接的复用,避免频繁创建和销毁连接带来的性能开销。 2. **自动事务管理**:工具类可以提供自动开启、提交和回滚事务的功能...

    阿里druid连接池1.1.21版本(支持达梦数据库)

    基于阿里的druid连接池,自己把对国产数据库达梦的支持加上去了,支持了wall方式,暂时没发现什么问题 :) 使用方式同原版

    JDBCUtils.java

    在最近的一段时间开始学习java,所以在数据库连接的这一块就使用了JDBC没有使用框架,但是发现一个好的JDBC工具类也不是那么好写,把自己的记录下来以便以后学习和提高

    jdbc连接数据库的工具类

    一个jdbc连接数据库的工具类,简化代码书写,方便快捷

    JDBCUtils.zip

    总的来说,"JDBCUtils.zip"提供的工具类和配置文件是Java项目中常见的数据库操作支持,通过Druid连接池的使用,可以在保证性能的同时,简化数据库连接的管理工作,提高代码的可维护性和可读性。开发者可以依据这个...

    jdbc连接数据库的方式

    连接池会预先创建一定数量的数据库连接,供程序复用,避免了频繁创建和关闭连接的开销。 2. 使用try-with-resources:Java 7引入了try-with-resources语句,可以自动关闭资源,避免资源泄露。例如: ``` try ...

    JDBCUtils所需jar包

    JDBCUtils可能依赖于额外的jar包,比如Apache Commons DBCP或C3P0,这些库提供了数据库连接池功能,能够高效管理数据库连接,避免频繁创建和销毁连接。 4. **Apache Commons DBCP**: 这是一个流行的数据库连接池...

    JDBCUtils所需的jar包(实力推荐)

    数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中, 这些数据库连接的数量是由最小数据库连接数来设定的.无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量.连接池的最大...

    jdbc连接数据库实现改查

    ### JDBC 连接数据库实现增删改查操作详解 #### 一、引言 Java Database Connectivity (JDBC) 是 Java 开发者访问关系型数据库的标准方法。它为开发者提供了访问各种数据库的统一接口,使开发者能够用同样的方式...

    JDBC连接MySQL例子

    在实际应用中,为了提高代码的可维护性和复用性,通常会封装一个工具类如`JDBCUtils`,提供连接池管理和数据库操作的通用方法。连接池如C3P0、HikariCP或Apache DBCP,可以有效管理数据库连接,减少资源消耗。 综上...

    链接数据库工具类

    DBUtil是一个常用的数据库连接池工具类,它封装了JDBC的基本操作,如建立和关闭数据库连接,执行SQL语句等,以提高代码的可读性和复用性。在Java开发中,使用DBUtil可以避免频繁地创建和关闭数据库连接,从而提高...

    JDBCUtils.java代码

    利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查。其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口: 1、public Connection getConnection() 获得数据库的...

Global site tag (gtag.js) - Google Analytics