`
nbtlxx
  • 浏览: 252757 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

jdbc学习(二): 创建数据库连接池

阅读更多
今天继续学习了connectionPool的概念,就是设置一个list来保存数据库连接对象。
在需要使用连接对象时,从list中获取,如果list为空的情况下,才生成新的connection

下面是具体的代码和配置文件。

/**
 * 
 */
package db;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * @author sean
 * 
 * 1. 初始化jdbcPool对象,将jdcb2. properties文件名传入
 * 2. 通过jdbcPool获得连接
 * 3. 关闭jbdcPool的连接池
 * 4. 再次获得一个connection对象
 * 5. 比较两个对象的差别,结果为true
 * 也就是证明使用的是同一个对象,而不是新生成的connection对象
 *
 */
public class JdbcPoolDemo {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws FileNotFoundException 
	 * @throws SQLException 
	 */
	public static void main(String[] args) throws FileNotFoundException, IOException, SQLException {
		// TODO Auto-generated method stub
		
		DBSource dbSource = new JdbcPool("jdbc2.properties");
		Connection conn1 = dbSource.getConnect();
		
		dbSource.closeConnection(conn1);
		
		Connection conn2 = dbSource.getConnect();
		
		//打印结果为true, 说明是从连接队列中取出的连接对象,而不是新的连接
		System.out.println(conn1 == conn2);
		
	}

}




/**
 * 
 */
package db;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Properties;

import sun.security.krb5.internal.p;

/**
 * @author sean
 * 
 * 1. 构造函数,设置jdbc配置文件
 * 2. 初始化,赋值,关键是其中的poolSize
 * 3. 
 *
 */
public class JdbcPool implements DBSource {

	private Properties props;
	private String driver;
	private String password;
	private String username;
	private String url;
	private int poolSize;								//连接池最大的容量
	private ArrayList<Connection> connections;			//连接池容器

	public JdbcPool() throws FileNotFoundException, IOException{
		this("jdbc.properties");
	}
	

	/**
	 * jdbcPool的构造函数
	 * 加载配置文件
	 * 按照key, value读取相应的信息,特别是poolSize
	 * @param configFilename
	 * @throws FileNotFoundException
	 * @throws IOException
	 */
	public JdbcPool(String configFilename) throws FileNotFoundException, IOException {
		// TODO Auto-generated constructor stub
		props = new Properties();
		props.load(new FileInputStream(configFilename));
		
		url = props.getProperty("net.tuolian.url");
		username = props.getProperty("net.tuolian.username");
		password = props.getProperty("net.tuolian.password");
		driver = props.getProperty("net.tuolian.Driver");
		
		//读取连接池的最大个数
		poolSize = Integer.parseInt(props.getProperty("net.tuolian.poolSize"));
		
		//加载数据库驱动程序
		try {
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//初始化connection的容器列表
		connections = new ArrayList<Connection>();
	}


	/**
	 * 关闭连接池
	 * 如果当前的连接个数达到了队列上限,则关闭该连接
	 * 否则,将该连接放入连接队列中待用
	 * 
	 * 注意需要同步操作
	 * @return 
	 */
	public synchronized void closeConnection(Connection conn) throws SQLException {
		// TODO Auto-generated method stub
		if(connections.size() == poolSize){
			conn.close();
		}
		
		connections.add(conn);
	}

	/**
	 * 获得connection的数据库连接对象
	 * 如果当前连接队列为空,则返回一个新的连接
	 * 否则,从列表中取出最后一个对象
	 * 注意此处需要进行同步设置
	 */
	public synchronized Connection getConnect() throws SQLException {
		// TODO Auto-generated method stub
		if(connections.size() == 0){
			return DriverManager.getConnection(url, username, password);
		}		
		int index = connections.size() - 1;
		return connections.get(index);
	}

}





package db;

import java.sql.Connection;
import java.sql.SQLException;

/**
 * 接口类
 * getConnection()
 * closeConn()
 * @author sean
 *
 */
public interface DBSource {
	public Connection getConnect() throws SQLException;
	public void closeConnection(Connection conn) throws SQLException;

}




net.tuolian.Driver=com.mysql.jdbc.Driver
net.tuolian.url=jdbc:mysql://localhost:3306/demo
net.tuolian.username=root
net.tuolian.password=root
net.tuolian.poolSize=100


当然,数据库连接池比较粗糙,复杂的连接池可以参考使用apache common 项目DBCP。 有时间好好研究下,这个对于网络游戏服务器端是比较重要的技术之一。

第三篇内容将要学习statement, preparedstatment, 进行数据库记录的操作

分享到:
评论

相关推荐

    Java jdbc数据库连接池总结

    Java JDBC 数据库连接池总结 Java 语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁。在 Web 应用开发的早期,主要使用的技术是 CGIASPPHP 等。之后,Sun 公司推出了基于 Java 语言的 ...

    常用jdbc数据库连接jar包,数据库连接池jar包

    数据库连接池在初始化时会创建一定数量的数据库连接并保存起来,当应用程序需要连接时,可以从池中获取一个已存在的连接,而不是每次都去新建,用完后也不立即关闭,而是归还给连接池。这样可以显著减少建立和释放...

    一种简单JDBC数据库连接池的实现.rar_connection pool jdbc_site:www.pudn.com_数据库

    在Java编程中,数据库连接池是一种管理数据库连接的机制,它允许程序重复使用...对于初学者而言,理解并动手实现一个简单的连接池有助于深入理解数据库连接池的工作原理,为进一步学习和使用更复杂的连接池库打下基础。

    java数据库连接池

    以下代码片段展示了如何在Java中实现一个简单的数据库连接池: ```java public class BaseDao { private String dbUrl = ""; // 数据库URL private String jdbcDriver = ""; // JDBC驱动 private String ...

    jdbc数据库连接池

    ** JDBC数据库连接池详解 ** 在Java开发中,JDBC(Java Database Connectivity)是用于与数据库交互的标准API。然而,直接使用JDBC进行数据库操作可能会导致资源管理的问题,因为每次数据库连接的创建和关闭都会...

    Java-jdbc数据库连接池总结.doc

    Java JDBC 数据库连接池技术是Java应用程序访问数据库的关键优化手段,尤其在Web应用程序中,它解决了传统JDBC连接方式存在的效率低下和资源浪费问题。Java JDBC(Java Database Connectivity)是Java语言与各种...

    Tongweb5中配置JDBC连接池

    JDBC连接池是在应用启动时预创建一定数量的数据库连接,并将其存储在一个池中。当应用需要与数据库交互时,不是每次都去建立新的连接,而是从连接池中获取一个已存在的连接。使用完毕后,连接会归还到池中,以便其他...

    DB_Conn_Pool.rar_创建数据库_数据库 连接池_数据库连接池_连接池

    创建数据库连接池通常需要以下步骤: 1. 选择连接池实现:有许多成熟的数据库连接池实现,如Apache的DBCP、C3P0,以及HikariCP等。这些组件提供了丰富的配置选项,可以根据项目需求选择合适的连接池。 2. 配置连接...

    JSP数据库连接池连接实例

    数据库连接池允许程序高效地管理与数据库的连接,减少了创建和销毁连接的开销,提高了系统资源利用率。下面,我们将详细讨论JSP中数据库连接池的实现、工作原理以及如何实例化。 1. **数据库连接池概念**: 数据库...

    JDBC数据库连接池实现原理

    在处理大量数据库交互的Web应用中,频繁地创建和关闭数据库连接会消耗大量的系统资源,因此引入了数据库连接池的概念。数据库连接池在初始化时会创建一定数量的数据库连接,这些连接可以被多个应用程序共享,从而...

    jdbc数据库连接池工程文件

    通过分析和学习这个“jdbc数据库连接池工程文件”的“demo”,开发者能够掌握如何在实际项目中集成和使用数据库连接池,提升应用的性能和稳定性。同时,理解连接池的工作原理有助于进行更高效的数据库操作和问题排查...

    JAVA 完整的数据库连接池实现

    Java 数据库连接池是 Java 应用程序中用于管理数据库连接的重要工具,它极大地提高了应用程序的性能和效率。本文将详细介绍如何在 Java 中实现一个完整的数据库连接池,并探讨其核心概念、工作原理以及如何根据需求...

    基于JDBC的数据库连接池技术研究

    ### 基于JDBC的数据库连接池技术研究 #### 一、引言 随着互联网技术的迅猛发展,特别是Web应用的广泛普及,传统的客户端/服务器(C/S)架构已经逐渐被浏览器/服务器(B/S)三层架构所取代。在这种背景下,为了提高...

    JAVA 使用数据库连接池连接Oracle数据库全代码

    1. **BasicDataSource**:这是DBCP提供的核心类,用于创建数据库连接池。 2. **ThreadLocal**:用于保存每个线程的本地副本数据,本例中用来保存当前线程的数据库连接。 3. **Properties**:用于加载配置文件中的...

    03-数据库连接池驱动_数据库连接池;驱动_

    数据库连接池是现代应用程序开发中的重要组成部分,尤其是在处理大量数据交互的应用中,它极大地提高了数据库操作的效率和系统的稳定性。本资源"03-数据库连接池驱动"包含了三种常用的数据库连接池驱动:C3P0、Druid...

Global site tag (gtag.js) - Google Analytics