今天继续学习了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, 进行数据库记录的操作
分享到:
相关推荐
使用数据库连接池优化程序性能 2.1.数据库连接池的基本概念 3.自定义数据连接池 4.开源数据库连接池(第三方企业中使用的连接池) 4.1.DBCP数据源 4.2.C3P0连接池 4.3.Druid连接池 4.3.1.druid...
Tongweb5中配置JDBC连接池的文档。Web应用通过JNDI获取Tongweb配置的JDBC数据源(连接池
JDBC数据库连接池,创建与数据库的连接,释放与数据库的连接
为了解决这个问题,引入了数据库连接池技术(个人认为数据库连接池技术是为解决这个问题的),它是批量创建一批数据库连接,放到一个数据库连接池,在需要数据库连接时,像这个池子拿,用完后则将数据库连接还回...
write-jdbc-deom:纯手写数据库连接池,创建多个线程的替换机制
数据库连接池:Connection pooling,它是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。 数据库连接池运行机制 从连接池获取或创建可用连接; 使用...
NULL 博文链接:https://yr512656630.iteye.com/blog/1001669
程序开发,存在很多问题:首先,每一次Web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统...
插入-insertJDBC实现修改数据-更新–updateJDBC实现删除数据-删除—deleteJDBC实现查询数据-查询—select案例:实现用户登录案例:登录更新—-防止SQL注入攻击数据库连接池—C3P0 上一篇文章给大家写了jdbc的基本的...
01A MySQL讲解及创建数据库表.wmv 01B MySQL讲解及创建数据库表.wmv 02A 创建项目并实现JDBC访问数据库.wmv 02B 创建项目并实现JDBC访问数据库.wmv 02C 创建项目并实现JDBC访问数据库.wmv 03A ORM实现数据的保存.wmv...
我们所学习的均为jdbc2.0规范,jdbc1.0为直接连接,而jdbc2.0它有JNDI服务,在服务器启动时自动创建一个连接池,定义了一个DataSource接口,用其标准才能使用JDBC连接池
tomcat连接池: context.xml配置: <Resource name="jdbc/oracle" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver" url=" jdbc:oracle:thin:@host:port:...
第一章 自定义连接池使用JDBC操作数据库,需要建立Connection,使用传统的JDBC操作需要每次创建Connection,创建Connection是一个
01A MySQL讲解及创建数据库表.wmv 01B MySQL讲解及创建数据库表.wmv 02A 创建项目并实现JDBC访问数据库.wmv 02B 创建项目并实现JDBC访问数据库.wmv 02C 创建项目并实现JDBC访问数据库.wmv 03A ORM实现数据的保存.wmv...
Java学习日志(三十三)JDBC预处理对象登陆注册案例模拟:用户注入攻击数据库解决用户注入式攻击PreparedStatement对象对数据库表进行增删改查连接池连接池的原理连接池的规范接口DataSource创建并测试C3P0连接池的...
4.7.1 连接池数据源(Connection PoolDataSource) 4.7.2 连接池处理事件 4.7.3 三层环境下的连接池操作 4.7.4 连接池和DataSource实现 4.7.5 包含连接池的数据源配置 4.7.6 池连接对象对于语句的重新利用 ...
01A MySQL讲解及创建数据库表.wmv 01B MySQL讲解及创建数据库表.wmv 02A 创建项目并实现JDBC访问数据库.wmv 02B 创建项目并实现JDBC访问数据库.wmv 02C 创建项目并实现JDBC访问数据库.wmv 03A ORM实现数据的保存.wmv...
JDBC数据库操作乱码非主流解决方案---JDBC连接驱动代理 以驱动的方式提供给使用方,在底层实现连接的代理管理功能,向使用者隐藏 实现过程以及无缝的过渡 ...新增WebSphere db2 jdbc数据源连接池的支持!
第一步:写javabean 代码如下: package withouttears.jdbc.db; import java.util.HashMap; import java.sql.*;... //数据库资源的连接工厂是javax.sql.DataSource对象, //它可以创建java.sql.Connec
3、druid 数据库连接池配置 url=jdbc:mysql://localhost:3306/db_zbcbms?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8 username=root password=123456 driver=...