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

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工具类。

    实现数据库的连接和释放

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

    阿里巴巴数据库连接池应该是目前最好的数据库连接池:大并发稳定,操作数据库效率高。此demo不仅有和spring整合的例子,还有单独配置的实例,供大家学习掌握

    JDBCUtils应用Durid连接池

    JDBCUtils应用Durid连接池...

    JDBCUtils.java

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

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

    下面小编就为大家分享一篇自定义一个简单的JDBC连接池实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    jdbc连接数据库的工具类

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

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

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

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

    c3p0,DBCP,dbutils,druid-1.0.9以及配置文件

    JDBCUtils.java代码

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

    JDBC连接数据库(durid.properties)

    Java web 开发使用JDBC和配置文件连接到数据库durid.properties和JDBCUtils.java文件(注意:durid.properties中内容要改为自己的url=jdbc:mysql://localhost:3306/数据库名称,username=数据库用户名,password=...

    java jdbc 连接数据库

    功能介绍: 需手动导入驱动包mysql-connector-java-5.0.4-bin.jar 本例子的包路经是F:\workspace\...JdbcUtils.java 静态类方式创建连接对象 注意数据库连接账户密码 包内有anbyke.sql数据库文件 运行方法: 简单...

    JDBC driver

    Sybase官方的JDBC驱动程序——jConnect 驱动类名:com.sybase.jdbc3.jdbc.SybDriver 连接URL:jdbc:sybase:Tds:host:port/database?property_name=value

    SpringBoot中封装jdbc工具类

    现在的数据层的开发,大多会使用...但是在一些极端的场景下往往原生的jdbc方式操作数据库更灵活,性能更高。由于部分场景下MyBatis或JPA之类无法满足我的需求,所以我打算自己封装一套查数据库的工具类。 文章地址: ...

    MySQL数据库在idea中的增删改查,JDBC简化,JDBC工具类封装,orm模式,数据库三层架构,JDBC事务

    本项目为一个简单的JDBC项目,包括:MySQL数据库在idea中的增删改查,JDBC简化,JDBC工具类封装,orm模式,数据库三层架构,JDBC事务 新建一个ProductManager的项目,实现利用ORM思想和三层架构以下功能: t_product...

    JdbcUtils:(仿Spring JdbcTemplate)JDBC工具类

    JdbcUtils使用指南JdbcUtils是JDBC的工具类,封装了JDBC连接获取,语句结构,资源释放等繁琐步骤,对外提供简洁的数据库查询和更新操作接口。使用前准备添加maven仓库地址&lt; repositories&gt; &lt; repository&gt; &lt; id&gt;byx-...

    jdbc封装(实现对实体的增删改查[分页]).zip

    jdbc封装(实现对实体的增删改查[分页]),辅助学习Hibernate 包含三个文件夹,分别是: code-access实现 是用access实现的,本意是access方便,就一个文件,方便部署。但access有好多不支持,就写成这样.主要是可参考Dao...

    jdbcUtils连接工具

    java,mysql,oracle连接工具jdbc执行数据库增删改查工具类。直接操作数据库工具类,对不同数据库远程同步操作使用。

    MVC_JDBC.zip

    MVC分层,简单的数据库连接池,jdbcUtils,sql语句 //新人资源,免费下载白嫖,一键三连敬请指正

    JdbcUtils2.java

    开发时使用JDBC时所用到的JDBCUTILS工具类方便开发人员使用简化代码

    jdbcutils:Java jdbc的实用程序

    参考src / test / java / name / leiqin / jdbc / JDBCUtilsTest.java 建表: JDBCUtils.update(conn, "DROP TABLE IF EXISTS test_bean"); JDBCUtils.update(conn, "CREATE TABLE IF NOT EXISTS test_bean (id ...

Global site tag (gtag.js) - Google Analytics