这句代码:connPool .createPool();
eclipse提示:标记“createPool”上有语法错误,在此标记之后应为 Identifier
什么意思啊?=======================================这个例子是根据POSTGRESQL数据库写的,
请用的时候根据实际的数据库调整。调用方法如下:① ConnectionPool connPool
= new ConnectionPool("org.postgresql.Driver"
,"jdbc:postgresql://dbURI:5432/DBName"
,"postgre"
,"postgre");② connPool .createPool();
Connection conn = connPool .getConnection();
虽然现在用APACHE COMMONS DBCP可以非常方便的建立数据库连接池,
但是像这篇文章把数据库连接池的内部原理写的这么透彻,注视这么完整,
真是非常难得,让开发人员可以更深层次的理解数据库连接池,真是非常感
谢这篇文章的作者。import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Enumeration;
import java.util.Vector;public class ConnectionPool {private String jdbcDriver = ""; // 数据库驱动private String dbUrl = ""; // 数据 URLprivate String dbUsername = ""; // 数据库用户名private String dbPassword = ""; // 数据库用户密码private String testTable = ""; // 测试连接是否可用的测试表名,默认没有测试表private int initialConnections = 10; // 连接池的初始大小private int incrementalConnections = 5;// 连接池自动增加的大小private int maxConnections = 50; // 连接池最大的大小private Vector connections = null; // 存放连接池中数据库连接的向量 , 初始时为 null// 它中存放的对象为 PooledConnection 型/*** 构造函数** @param jdbcDriver String JDBC 驱动类串* @param dbUrl String 数据库 URL* @param dbUsername String 连接数据库用户名* @param dbPassword String 连接数据库用户的密码**/public ConnectionPool(String jdbcDriver,String dbUrl,String dbUsername,String dbPassword) { this.jdbcDriver = jdbcDriver;
this.dbUrl = dbUrl;
this.dbUsername = dbUsername;
this.dbPassword = dbPassword;}/*** 返回连接池的初始大小** @return 初始连接池中可获得的连接数量*/public int getInitialConnections() { return this.initialConnections;}/*** 设置连接池的初始大小** @param 用于设置初始连接池中连接的数量*/public void setInitialConnections(int initialConnections) { this.initialConnections = initialConnections;}/*** 返回连接池自动增加的大小 、** @return 连接池自动增加的大小*/public int getIncrementalConnections() { return this.incrementalConnections;}/*** 设置连接池自动增加的大小* @param 连接池自动增加的大小*/public void setIncrementalConnections(int incrementalConnections) { this.incrementalConnections = incrementalConnections;}/*** 返回连接池中最大的可用连接数量* @return 连接池中最大的可用连接数量*/public int getMaxConnections() { return this.maxConnections;}/*** 设置连接池中最大可用的连接数量** @param 设置连接池中最大可用的连接数量值*/public void setMaxConnections(int maxConnections) { this.maxConnections = maxConnections;}/*** 获取测试数据库表的名字** @return 测试数据库表的名字*/public String getTestTable() { return this.testTable;}/*** 设置测试表的名字* @param testTable String 测试表的名字*/public void setTestTable(String testTable) { this.testTable = testTable;}/**** 创建一个数据库连接池,连接池中的可用连接的数量采用类成员* initialConnections 中设置的值*/public synchronized void createPool() throws Exception { // 确保连接池没有创建
// 如果连接池己经创建了,保存连接的向量 connections 不会为空
if (connections != null) {
return; // 如果己经创建,则返回
}
// 实例化 JDBC Driver 中指定的驱动类实例
Driver driver = (Driver) (Class.forName(this.jdbcDriver).newInstance());
DriverManager.registerDriver(driver); // 注册 JDBC 驱动程序
// 创建保存连接的向量 , 初始时有 0 个元素
connections = new Vector();
// 根据 initialConnections 中设置的值,创建连接。
createConnections(this.initialConnections);
System.out.println(" 数据库连接池创建成功! ");}/*** 创建由 numConnections 指定数目的数据库连接 , 并把这些连接* 放入 connections 向量中** @param numConnections 要创建的数据库连接的数目*/@SuppressWarnings("unchecked")
private void createConnections(int numConnections) throws SQLException { // 循环创建指定数目的数据库连接
for (int x = 0; x < numConnections; x++) {
// 是否连接池中的数据库连接的数量己经达到最大?最大值由类成员 maxConnections
// 指出,如果 maxConnections 为 0 或负数,表示连接数量没有限制。
// 如果连接数己经达到最大,即退出。
if (this.maxConnections > 0 && this.connections.size() >= this.maxConnections) {
break;
}
//add a new PooledConnection object to connections vector
// 增加一个连接到连接池中(向量 connections 中)
try{
connections.addElement(new PooledConnection(newConnection()));
}catch(SQLException e){
System.out.println(" 创建数据库连接失败! "+e.getMessage());
throw new SQLException();
}
System.out.println(" 数据库连接己创建 ......");
}
}/**
eclipse提示:标记“createPool”上有语法错误,在此标记之后应为 Identifier
什么意思啊?=======================================这个例子是根据POSTGRESQL数据库写的,
请用的时候根据实际的数据库调整。调用方法如下:① ConnectionPool connPool
= new ConnectionPool("org.postgresql.Driver"
,"jdbc:postgresql://dbURI:5432/DBName"
,"postgre"
,"postgre");② connPool .createPool();
Connection conn = connPool .getConnection();
虽然现在用APACHE COMMONS DBCP可以非常方便的建立数据库连接池,
但是像这篇文章把数据库连接池的内部原理写的这么透彻,注视这么完整,
真是非常难得,让开发人员可以更深层次的理解数据库连接池,真是非常感
谢这篇文章的作者。import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Enumeration;
import java.util.Vector;public class ConnectionPool {private String jdbcDriver = ""; // 数据库驱动private String dbUrl = ""; // 数据 URLprivate String dbUsername = ""; // 数据库用户名private String dbPassword = ""; // 数据库用户密码private String testTable = ""; // 测试连接是否可用的测试表名,默认没有测试表private int initialConnections = 10; // 连接池的初始大小private int incrementalConnections = 5;// 连接池自动增加的大小private int maxConnections = 50; // 连接池最大的大小private Vector connections = null; // 存放连接池中数据库连接的向量 , 初始时为 null// 它中存放的对象为 PooledConnection 型/*** 构造函数** @param jdbcDriver String JDBC 驱动类串* @param dbUrl String 数据库 URL* @param dbUsername String 连接数据库用户名* @param dbPassword String 连接数据库用户的密码**/public ConnectionPool(String jdbcDriver,String dbUrl,String dbUsername,String dbPassword) { this.jdbcDriver = jdbcDriver;
this.dbUrl = dbUrl;
this.dbUsername = dbUsername;
this.dbPassword = dbPassword;}/*** 返回连接池的初始大小** @return 初始连接池中可获得的连接数量*/public int getInitialConnections() { return this.initialConnections;}/*** 设置连接池的初始大小** @param 用于设置初始连接池中连接的数量*/public void setInitialConnections(int initialConnections) { this.initialConnections = initialConnections;}/*** 返回连接池自动增加的大小 、** @return 连接池自动增加的大小*/public int getIncrementalConnections() { return this.incrementalConnections;}/*** 设置连接池自动增加的大小* @param 连接池自动增加的大小*/public void setIncrementalConnections(int incrementalConnections) { this.incrementalConnections = incrementalConnections;}/*** 返回连接池中最大的可用连接数量* @return 连接池中最大的可用连接数量*/public int getMaxConnections() { return this.maxConnections;}/*** 设置连接池中最大可用的连接数量** @param 设置连接池中最大可用的连接数量值*/public void setMaxConnections(int maxConnections) { this.maxConnections = maxConnections;}/*** 获取测试数据库表的名字** @return 测试数据库表的名字*/public String getTestTable() { return this.testTable;}/*** 设置测试表的名字* @param testTable String 测试表的名字*/public void setTestTable(String testTable) { this.testTable = testTable;}/**** 创建一个数据库连接池,连接池中的可用连接的数量采用类成员* initialConnections 中设置的值*/public synchronized void createPool() throws Exception { // 确保连接池没有创建
// 如果连接池己经创建了,保存连接的向量 connections 不会为空
if (connections != null) {
return; // 如果己经创建,则返回
}
// 实例化 JDBC Driver 中指定的驱动类实例
Driver driver = (Driver) (Class.forName(this.jdbcDriver).newInstance());
DriverManager.registerDriver(driver); // 注册 JDBC 驱动程序
// 创建保存连接的向量 , 初始时有 0 个元素
connections = new Vector();
// 根据 initialConnections 中设置的值,创建连接。
createConnections(this.initialConnections);
System.out.println(" 数据库连接池创建成功! ");}/*** 创建由 numConnections 指定数目的数据库连接 , 并把这些连接* 放入 connections 向量中** @param numConnections 要创建的数据库连接的数目*/@SuppressWarnings("unchecked")
private void createConnections(int numConnections) throws SQLException { // 循环创建指定数目的数据库连接
for (int x = 0; x < numConnections; x++) {
// 是否连接池中的数据库连接的数量己经达到最大?最大值由类成员 maxConnections
// 指出,如果 maxConnections 为 0 或负数,表示连接数量没有限制。
// 如果连接数己经达到最大,即退出。
if (this.maxConnections > 0 && this.connections.size() >= this.maxConnections) {
break;
}
//add a new PooledConnection object to connections vector
// 增加一个连接到连接池中(向量 connections 中)
try{
connections.addElement(new PooledConnection(newConnection()));
}catch(SQLException e){
System.out.println(" 创建数据库连接失败! "+e.getMessage());
throw new SQLException();
}
System.out.println(" 数据库连接己创建 ......");
}
}/**
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货