- 浏览: 32454 次
- 性别:
- 来自: 天津
最新评论
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;
import IPNMS.AppMain;
/**
* 配置数据库连接 driver url user password
*
* @author llt
*
*/
public class DBConnection {
/**
* DBConnectin instance 定义了数据库的唯一实例 定义了四个连接 conn,conn1,conn2,conn3
*
*/
private static DBConnection instance;
private final static int databaseConnectionNum = 15;
private final static int maxConnectNum = 100;
private static int checkOut = 0;//已用连接
private static ArrayList<Connection> connectlist = new ArrayList<Connection>();
private static ArrayList<Statement> stmtList = new ArrayList<Statement>();
public static void createDBConnectionPool(){
for (int i = connectlist.size(); i < databaseConnectionNum; i++) {
instance = new DBConnection();
Connection connobject=null;
try {
connobject = instance.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
connectlist.add(connobject);
}
}
public static void closeDBConnectionPool(){
Iterator dbConnectionIterator = connectlist.iterator();
// Iterator stmtIterator = stmtList.iterator();
while(dbConnectionIterator.hasNext()){
Connection connection = (Connection) dbConnectionIterator.next();
try {
if(connection!=null){
connection.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// while(stmtIterator.hasNext()){
// Statement stmtobj = (Statement) stmtIterator.next();
// try {
// dealClose(stmtobj,null);
// } catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
}
public DBConnection() {
super();
}
// public static void setText(String text) {
// DBConnection.text = text;
// }
public static Connection getConnection() throws SQLException {
// // 读取数据库配置信息(设计内部软件信息 略)
return DriverManager.getConnection(url, uNameEnyet, uPwdEnyet);
}
private static Connection getInstance() throws SQLException {
if (instance == null) {
instance = new DBConnection();
}
return instance.getConnection();
}
/*
//处理开始事物
public static void beginTrans() throws SQLException{
Statement stmt = null;
boolean autoCommit;
try
{
autoCommit = getInstance().getAutoCommit();
getInstance().setAutoCommit(false);
}
catch(SQLException ex)
{
ex.printStackTrace();
System.out.print("beginTrans Errors");
throw ex;
}
}
//处理更新sql
public static void executeUpdate(String sql) throws SQLException {
Statement stmt = null;
try
{
stmt=getInstance().createStatement();
stmt.executeUpdate(sql);
}
catch(SQLException ex)
{
ex.printStackTrace();
System.out.println("conndb.executeUpdate:"+ex.getMessage());
throw ex;
}
}
//处理提交事物
public static void commit() throws SQLException {
boolean autoCommit = false;
try
{
getInstance().commit();
getInstance().setAutoCommit(autoCommit);
}
catch(SQLException ex)
{
ex.printStackTrace();
System.out.print("Commit Errors");
throw ex;
}
}
// 处理回滚事物
public static void rollback(){
Statement stmt = null;
boolean autoCommit = false;
try
{
getInstance().rollback();
getInstance().setAutoCommit(autoCommit);
}
catch(SQLException ex)
{
ex.printStackTrace();
System.out.print("Rollback Errors");
}
}*/
private static Connection getFreeConnection(){
int stmtNum = stmtList.size();//获取statement对象的个数
Connection stmtConn=null;
if (connectlist.size() > 0) {
// 获取向量中第一个可用连接
stmtConn = (Connection) connectlist.get(0);
connectlist.remove(0);
try {
if (stmtConn.isClosed()) {
// 递归调用自己,尝试再次获取可用连接
stmtConn = getFreeConnection();
}
} catch (SQLException e) {
// 递归调用自己,尝试再次获取可用连接
stmtConn = getFreeConnection();
}
} else if (checkOut < maxConnectNum) {
instance = new DBConnection();
Connection connobject=null;
try {
stmtConn = instance.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// con = newConnection();
}
if (stmtConn != null) {
checkOut++;
}
return stmtConn;
}
// 得到一个会话
public static Statement getStatement() {
Statement stmt = null;
Connection stmtConn = getFreeConnection();
try {
stmt = stmtConn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return stmt;
}
// 处理提取查询,返回结果集
public static ResultSet dealQuery(String sql, Statement stmt) {
ResultSet rs = null;
try {
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
return rs;
}
/**·
* 使用给定连接执行查询操作
* @param sql 执行语句
* @param conn 连接
* @return
* @throws SQLException
*/
public static ResultSet dealQuery(String sql,Connection conn) throws SQLException {
Statement stmt = null;
ResultSet rs = null;
try{
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
}finally{
// if(stmt!= null&& stmt.isClosed() == false){
// stmt.close();
// }
}
return rs;
}
// 处理数据更新
public static int dealUpdate(String sql, Statement stmt) {
try {
return stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
return -1;
}
}
/**
* 使用给定连接来处理更新
* @param sql 执行语句
* @param conn 连接
* @return
* @throws SQLException
*/
public static int dealUpdate(String sql,Connection conn) throws SQLException {
Statement stmt = null;
int check =-1;
try{
stmt = conn.createStatement();
check = stmt.executeUpdate(sql);
}finally{
// if(stmt!= null&& stmt.isClosed() == false){
// stmt.close();
// }
}
return check;
}
// 关闭会话连接
public static void dealClose(Statement stmt, ResultSet rs) throws SQLException {
Connection connObj = stmt.getConnection();
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if(checkOut > databaseConnectionNum){//当statement对象数大于数据库连接数的时候,关闭一个statement对象的同时关闭一个连接
if(connObj!=null&&(connObj.isClosed()==false)){
connObj.close();
checkOut--;
}
}else{
connectlist.add(connObj);
checkOut--;
}
}
public static void dealClose(Connection conn,Statement stmt, ResultSet rs) throws SQLException {
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
// stmt.getConnection().close();
if(conn!= null && (conn.isClosed()==false)){
conn.close();
}
}
}
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;
import IPNMS.AppMain;
/**
* 配置数据库连接 driver url user password
*
* @author llt
*
*/
public class DBConnection {
/**
* DBConnectin instance 定义了数据库的唯一实例 定义了四个连接 conn,conn1,conn2,conn3
*
*/
private static DBConnection instance;
private final static int databaseConnectionNum = 15;
private final static int maxConnectNum = 100;
private static int checkOut = 0;//已用连接
private static ArrayList<Connection> connectlist = new ArrayList<Connection>();
private static ArrayList<Statement> stmtList = new ArrayList<Statement>();
public static void createDBConnectionPool(){
for (int i = connectlist.size(); i < databaseConnectionNum; i++) {
instance = new DBConnection();
Connection connobject=null;
try {
connobject = instance.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
connectlist.add(connobject);
}
}
public static void closeDBConnectionPool(){
Iterator dbConnectionIterator = connectlist.iterator();
// Iterator stmtIterator = stmtList.iterator();
while(dbConnectionIterator.hasNext()){
Connection connection = (Connection) dbConnectionIterator.next();
try {
if(connection!=null){
connection.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// while(stmtIterator.hasNext()){
// Statement stmtobj = (Statement) stmtIterator.next();
// try {
// dealClose(stmtobj,null);
// } catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
}
public DBConnection() {
super();
}
// public static void setText(String text) {
// DBConnection.text = text;
// }
public static Connection getConnection() throws SQLException {
// // 读取数据库配置信息(设计内部软件信息 略)
return DriverManager.getConnection(url, uNameEnyet, uPwdEnyet);
}
private static Connection getInstance() throws SQLException {
if (instance == null) {
instance = new DBConnection();
}
return instance.getConnection();
}
/*
//处理开始事物
public static void beginTrans() throws SQLException{
Statement stmt = null;
boolean autoCommit;
try
{
autoCommit = getInstance().getAutoCommit();
getInstance().setAutoCommit(false);
}
catch(SQLException ex)
{
ex.printStackTrace();
System.out.print("beginTrans Errors");
throw ex;
}
}
//处理更新sql
public static void executeUpdate(String sql) throws SQLException {
Statement stmt = null;
try
{
stmt=getInstance().createStatement();
stmt.executeUpdate(sql);
}
catch(SQLException ex)
{
ex.printStackTrace();
System.out.println("conndb.executeUpdate:"+ex.getMessage());
throw ex;
}
}
//处理提交事物
public static void commit() throws SQLException {
boolean autoCommit = false;
try
{
getInstance().commit();
getInstance().setAutoCommit(autoCommit);
}
catch(SQLException ex)
{
ex.printStackTrace();
System.out.print("Commit Errors");
throw ex;
}
}
// 处理回滚事物
public static void rollback(){
Statement stmt = null;
boolean autoCommit = false;
try
{
getInstance().rollback();
getInstance().setAutoCommit(autoCommit);
}
catch(SQLException ex)
{
ex.printStackTrace();
System.out.print("Rollback Errors");
}
}*/
private static Connection getFreeConnection(){
int stmtNum = stmtList.size();//获取statement对象的个数
Connection stmtConn=null;
if (connectlist.size() > 0) {
// 获取向量中第一个可用连接
stmtConn = (Connection) connectlist.get(0);
connectlist.remove(0);
try {
if (stmtConn.isClosed()) {
// 递归调用自己,尝试再次获取可用连接
stmtConn = getFreeConnection();
}
} catch (SQLException e) {
// 递归调用自己,尝试再次获取可用连接
stmtConn = getFreeConnection();
}
} else if (checkOut < maxConnectNum) {
instance = new DBConnection();
Connection connobject=null;
try {
stmtConn = instance.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// con = newConnection();
}
if (stmtConn != null) {
checkOut++;
}
return stmtConn;
}
// 得到一个会话
public static Statement getStatement() {
Statement stmt = null;
Connection stmtConn = getFreeConnection();
try {
stmt = stmtConn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return stmt;
}
// 处理提取查询,返回结果集
public static ResultSet dealQuery(String sql, Statement stmt) {
ResultSet rs = null;
try {
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
return rs;
}
/**·
* 使用给定连接执行查询操作
* @param sql 执行语句
* @param conn 连接
* @return
* @throws SQLException
*/
public static ResultSet dealQuery(String sql,Connection conn) throws SQLException {
Statement stmt = null;
ResultSet rs = null;
try{
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
}finally{
// if(stmt!= null&& stmt.isClosed() == false){
// stmt.close();
// }
}
return rs;
}
// 处理数据更新
public static int dealUpdate(String sql, Statement stmt) {
try {
return stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
return -1;
}
}
/**
* 使用给定连接来处理更新
* @param sql 执行语句
* @param conn 连接
* @return
* @throws SQLException
*/
public static int dealUpdate(String sql,Connection conn) throws SQLException {
Statement stmt = null;
int check =-1;
try{
stmt = conn.createStatement();
check = stmt.executeUpdate(sql);
}finally{
// if(stmt!= null&& stmt.isClosed() == false){
// stmt.close();
// }
}
return check;
}
// 关闭会话连接
public static void dealClose(Statement stmt, ResultSet rs) throws SQLException {
Connection connObj = stmt.getConnection();
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if(checkOut > databaseConnectionNum){//当statement对象数大于数据库连接数的时候,关闭一个statement对象的同时关闭一个连接
if(connObj!=null&&(connObj.isClosed()==false)){
connObj.close();
checkOut--;
}
}else{
connectlist.add(connObj);
checkOut--;
}
}
public static void dealClose(Connection conn,Statement stmt, ResultSet rs) throws SQLException {
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
// stmt.getConnection().close();
if(conn!= null && (conn.isClosed()==false)){
conn.close();
}
}
}
发表评论
-
TWaver组件之Tree使用(翻译TWaver文档+补充自己使用体会)
2010-04-09 21:37 3097第一篇:使用一个 Tree 组件 TTree ... -
TWaver组件之Table使用(翻译TWaver文档+补充自己使用体会)九
2010-04-08 16:57 1251第九篇:从表格获取 Element 数据 在 ... -
TWaver组件之Table使用(翻译TWaver文档+补充自己使用体会)八
2010-04-08 16:51 1902第八篇 使用 Element Table ... -
TWaver组件之Table使用(翻译TWaver文档+补充自己使用体会)七
2010-04-08 16:40 1320第七 篇:使用 AlarmTable 组件 A ... -
TWaver组件之Table使用(翻译TWaver文档+补充自己使用体会)六
2010-04-08 16:29 1316第六篇 TTable 的 高级使用 ... -
TWaver组件之Table使用(翻译TWaver文档+补充自己使用体会)五
2010-04-07 17:01 1197第五 篇:使用内置的列 TWaver 表格提供了两 ... -
TWaver组件之Table使用(翻译TWaver文档+补充自己使用体会)四
2010-04-07 16:49 1263第四篇 使用 TableModel ... -
TWaver组件之Table使用(翻译TWaver文档+补充自己使用体会)三
2010-04-07 16:41 2156第三 篇:使用表格列 一般情 况下使用一个空的表 ... -
TWaver组件之Table使用(翻译TWaver文档+补充自己使用体会)二
2010-04-07 16:28 1331第二 篇: 创建表格组件 作为一个扩 展自 Sw ... -
TWaver组件之Table使用(翻译TWaver文档+补充自己使用体会)一
2010-04-07 16:13 1286ResizableTable 这事一 个可以改 ... -
java性能
2009-12-18 17:11 761性能 “本附录由Joe Sharp投稿,并获得他的同意在这儿 ... -
java Swing进度条体现打开一个界面的进度
2009-11-19 17:11 8405网上提到进度条,总是提到多线程,然后把多线程加到程序里面,更有 ... -
软件优化中的一个小问题
2009-11-12 13:18 751在软件优化中,为了保证相同的数据只从数据库或者本地xml文件读 ...
相关推荐
本文将深入探讨Java环境下C/S结构中如何实现和使用数据库连接池。 首先,我们来看"DBOptions.java",这通常是一个配置类,用于存储数据库连接相关的参数,如数据库URL、用户名、密码、驱动类名等。这些信息会被用来...
在Java中,有多种数据库连接池实现,包括C3P0、DBCP和Proxool等。 **C3P0连接池配置参数详解** 1. `acquireIncrement`:当连接池中的连接耗尽时,一次同时尝试获取的连接数。默认值为3,意味着如果连接池为空,它...
### 单实例模式数据库连接池 #### 概述 单实例模式数据库连接池是一种软件设计模式,主要用于提高数据库访问效率并降低系统资源消耗。在该模式下,整个应用程序仅创建一个数据库连接池实例,所有数据库操作共享这...
10. **数据库连接池**:为了提高数据库访问效率,项目可能使用了数据库连接池技术,如C3P0或Apache DBCP,以复用数据库连接。 综上所述,这个课程设计涵盖了Java基础、C/S架构、数据库操作、GUI设计、网络编程等多...
连接池的概念源于数据库连接池,它的核心思想是复用已存在的资源,减少创建和销毁资源带来的开销。在Socket客户端连接池中,当我们需要发送数据时,可以从池中获取一个已建立的连接,使用完毕后归还而不是关闭,这样...
### Java中数据库连接池原理机制的详细讲解 #### 一、引言 在现代软件开发中,特别是基于Java的企业级应用开发中,数据库连接管理是一个关键环节。由于数据库连接是昂贵的资源,频繁地创建与关闭连接将严重影响系统...
数据库连接池是现代Java应用程序中不可或缺的组件,它在提高应用程序性能、管理和优化数据库资源方面起着关键作用。本文将深入探讨基于JDBC的数据库连接池技术,主要针对Oracle数据库,但很多概念同样适用于其他...
随着互联网技术的迅猛发展,特别是Web应用的广泛普及,传统的客户端/服务器(C/S)架构已经逐渐被浏览器/服务器(B/S)三层架构所取代。在这种背景下,为了提高企业级应用和电子商务系统的性能和响应速度,JDBC 2.0...
在本主题“代理模式之静态代理---数据库连接池对象实现原理”中,我们将探讨如何使用静态代理来实现数据库连接池。数据库连接池是现代应用中常用的优化手段,它可以高效地管理数据库连接,避免频繁地创建和关闭连接...
Apache Commons DBCP(Database Connection Pool)是一个开源的Java数据库连接池组件,它提供了一种在Java应用中管理和复用数据库连接的方式。这个组件是Apache软件基金会 Commons项目的一部分,其设计目的是提高...
HikariCP 是一个高性能的 Java 数据库连接池,由 Zachary Tong 开发并维护。它基于 Apache Commons DBCP,并进行了许多优化和改进,以提供更好的性能和可扩展性。 HikariCP 的核心理念是“简单、透明、高性能”,它...
### Java编写数据库连接池实例详解 #### 一、引言 在Java开发中,数据库连接管理是一项非常重要的任务。为了提高应用程序的性能和资源利用效率,通常会使用数据库连接池来管理与数据库之间的连接。本文将详细介绍...
总的来说,DBCP是一个高效、可靠的数据库连接池实现,它可以帮助Java应用优化数据库访问性能,减少资源消耗,同时提供了一套完善的管理机制来确保连接的稳定性和安全性。在实际项目中,结合其他ORM框架(如Hibernate...
数据库连接池是现代Java应用程序中管理数据库连接的重要工具,它能有效地提高系统性能,减少数据库资源的浪费。本文将深入探讨数据库连接池的概念,重点介绍C3P0连接池及其所需的JAR包。 首先,数据库连接池是一种...
在`MyConnectionHandler.java`这个文件中,我们可以推测它可能实现了一个自定义的数据库连接池。这个类可能包含以下关键部分: 1. **初始化连接池**:在类的初始化阶段,它会根据配置(如最大连接数、最小连接数等...
### Java连接各种数据库方式 在Java开发中,与多种数据库进行交互是一项常见需求。...需要注意的是,在实际应用中,为了确保程序的健壮性和安全性,建议使用连接池来管理数据库连接资源,并在代码中处理好异常情况。
本篇文章将深入探讨如何使用RMI来创建一个数据库连接池,以及这种做法的优势和实现细节。 首先,我们需要理解数据库连接池的概念。数据库连接池是一种资源管理机制,用于存储预创建的数据库连接。当客户端需要与...
Tomcat服务器是Apache软件基金会...通过上述配置步骤,Tomcat6.0服务器能够与MyEclipse6.0开发环境和mysql5.0数据库协同工作,实现一个高效稳定的数据库连接池,从而提高应用程序处理数据库操作的性能和扩展性。
传统C/S(客户端/服务器)架构逐步被B/S(浏览器/服务器)架构所取代,后者更加适应现代Web应用的需求。在这一背景下,Java作为一门强大的编程语言,其开发技术如Servlet+JSP+JavaBean得到了广泛的应用。这些技术...