连接池管理类
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Vector; import com.mysql.jdbc.Driver; /** * ConnectionManager * * 数据库连接 * * @author bzwm * * @version 1.0 */ public class ConnectionManager { /** 连接数 */ static int iRequestCount = 0; /** 连接Pool */ static Vector connectionPool = null; /** 初始连接数 */ static final int INIT_NUM_CONNECTION = 2; /** 追加连接数 */ static final int ADD_NUM_CONNECTION = 1; /** 最大连接数 */ static final int MAX_NUM_CONNECTION = 10; /** 最小连接数 */ static final int MIN_NUM_CONNECTION = INIT_NUM_CONNECTION; /** 初始化标志 */ boolean bInitialized = false; static String serverName = "172.16.1.182"; static String sDBDriver = "com.mysql.jdbc.Driver"; static String dbInstance = "DB_QQ"; static String sConnStr = "jdbc:mysql://" + serverName + "/" + dbInstance; static String dbUser = "root"; static String userPwd = "123456"; static { try { Class.forName(sDBDriver); DriverManager.registerDriver(new Driver()); } catch (Exception ex) { ex.printStackTrace(); } } /** * ConnectionPoolElement * * 数据库连接数 */ class ConnectionPoolElement { Connection con; boolean used; } /** * 构造函数 * * @throws SQLException * */ public ConnectionManager() throws SQLException { if (connectionPool == null) { connectionPool = new Vector(); } init(); } /** * Connection的取得* * * @throws SQLException */ public synchronized Connection getConnection() throws SQLException { ConnectionPoolElement elm = null; for (;;) { synchronized (connectionPool) { for (int i = 0; i < connectionPool.size(); i++) { elm = (ConnectionPoolElement) (connectionPool.elementAt(i)); if (!elm.used) { elm.used = true; return elm.con; } } } // 超过最大连接数,则追加 if (connectionPool.size() < MAX_NUM_CONNECTION) { createConnectionPool(ADD_NUM_CONNECTION); } else { try { this.wait(100); } catch (InterruptedException e) { } } } } /** * 连接完之后发行 * * @param con * Connection * * @throws SQLException */ public synchronized void releaseConnection(Connection con) throws SQLException { ConnectionPoolElement elm; synchronized (connectionPool) { for (int i = 0; i < connectionPool.size(); i++) { elm = (ConnectionPoolElement) (connectionPool.elementAt(i)); if (elm.con == con) { elm.used = false; return; } } } throw new SQLException("unknown Connection"); } /** * 数据库初始化 * * @throws SQLException * */ public void init() throws SQLException { if (bInitialized) return; synchronized (connectionPool) { if (connectionPool.size() < INIT_NUM_CONNECTION) { try { // 数据库Pool的生成 createConnectionPool(INIT_NUM_CONNECTION); } catch (Exception ex) { ex.printStackTrace(); throw new SQLException("データベース初期化エラー"); } synchronized (this) { iRequestCount++; } } else { synchronized (this) { iRequestCount++; } } } bInitialized = true; } /** * 从数据库断开 * */ public void destroy() { synchronized (this) { iRequestCount--; } if (iRequestCount < 0) { try { destroyConnection(); } catch (SQLException ex) { } } } /** * 设定ConnectionPool* * * @param int * numConnection * @throws SQLException */ private synchronized void createConnectionPool(int numConnection) throws SQLException { ConnectionPoolElement elm; synchronized (connectionPool) { for (int i = 0; i < numConnection; i++) { elm = new ConnectionPoolElement(); elm.con = DriverManager.getConnection(sConnStr, dbUser, userPwd); connectionPool.addElement(elm); } } } /** * ConnectionPool的Connection的关闭 * * @throws SQLException * */ synchronized void destroyConnection() throws SQLException { ConnectionPoolElement elm; synchronized (connectionPool) { for (int i = 0; i < connectionPool.size(); i++) { elm = (ConnectionPoolElement) (connectionPool.elementAt(i)); elm.con.close(); } } } }
数据库操作类
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class DBAccess { private ConnectionManager cm = null; public DBAccess() { try { cm = new ConnectionManager(); } catch (SQLException re) { re.printStackTrace(); } } private Connection getConnect() throws SQLException { return cm.getConnection(); } public void releaseConnection(Connection cn) throws SQLException { cm.releaseConnection(cn); } /** * 检索 * @param sqlId sqlid 对应于sql.properties中的id * @return 执行结果 List 中保存Map,每个Map是一个条记录。Key:列名,Value:值 * @throws SQLException */ public List executeQuery(String sqlId) throws SQLException { List resultList = new ArrayList(); ResultSet resultSet = null; PreparedStatement ps = null; Connection cn = null; try { cn = getConnect(); ps = cn.prepareStatement(getSQL(sqlId)); resultSet = ps.executeQuery(); Map map; for (; resultSet.next(); resultList.add(map)) { map = doCreateRow(resultSet); } } catch (SQLException sqle) { throw sqle; } catch (NullPointerException e) { } finally { try { resultSet.close(); ps.close(); releaseConnection(cn); } catch (NullPointerException e) { } } return resultList; } /** * 检索 * @param sqlId * @param strParams 查找时需要的params * @return * @throws SQLException */ public List executeQuery(String sqlId, String[] strParams) throws SQLException { List resultList = new ArrayList(); ResultSet resultSet = null; PreparedStatement ps = null; Connection cn = null; try { cn = getConnect(); ps = cn.prepareStatement(getSQL(sqlId)); for (int i = 1; i <= strParams.length; i++) { ps.setString(i, strParams[i - 1]); } resultSet = ps.executeQuery(); Map map; for (; resultSet.next(); resultList.add(map)) { map = doCreateRow(resultSet); } } catch (NullPointerException e) { } catch (SQLException sqle) { throw sqle; } finally { try { resultSet.close(); ps.close(); releaseConnection(cn); } catch (NullPointerException e) { } } return resultList; } /** * 更新DB * @param sqlId * @return * @throws SQLException */ public int executeUpdate(String sqlId) throws SQLException { int count = 0; Connection cn = null; PreparedStatement ps = null; try { cn = getConnect(); ps = cn.prepareStatement(getSQL(sqlId)); count = ps.executeUpdate(); cn.commit(); } catch (SQLException sqle) { throw sqle; } catch (NullPointerException e) { } finally { try { ps.close(); releaseConnection(cn); } catch (NullPointerException e) { } } return count; } /** * 更新DB * @param sqlId * @param lsParam * @return * @throws SQLException */ public int executeUpdate(String sqlId, String[] lsParam) throws SQLException { int count = 0; Connection cn = null; PreparedStatement ps = null; try { cn = getConnect(); ps = cn.prepareStatement(getSQL(sqlId)); for (int i = 1; i <= lsParam.length; i++) { ps.setString(i, lsParam[i - 1]); } count = ps.executeUpdate(); // cn.commit(); } catch (SQLException sqle) { throw sqle; } catch (NullPointerException e) { } finally { try { ps.close(); releaseConnection(cn); } catch (NullPointerException e) { } } return count; } /** * 根据id取得sql文 * @param sqlId * @return * @throws SQLException */ private String getSQL(String sqlId) throws SQLException { String sqlData = ""; if (sqlId == null || sqlId.length() == 0) { throw new SQLException(); } else { Map sqlMap = ResourceReader.getSqlMap(); sqlData = (String) sqlMap.get(sqlId); if (sqlData.trim().length() == 0) { throw new SQLException(); } else { return sqlData; } } } /** * 将执行sql文的结果放在List中 * @param resultSet * @return * @throws SQLException */ private final Map doCreateRow(ResultSet resultSet) throws SQLException { Map result = new HashMap(); try { ResultSetMetaData resultSetMetaData = resultSet.getMetaData(); int count = resultSetMetaData.getColumnCount(); for (int i = 1; i <= count; i++) { String label = resultSetMetaData.getColumnLabel(i); Object value = resultSet.getObject(i); result.put(label.toUpperCase(), value); } } catch (SQLException e) { throw e; } return result; } }
根据sqlid 取得sql文
import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.MissingResourceException; import java.util.ResourceBundle; /** * @author bzwm * */ public class ResourceReader { //sql.properties的路径,根据自己需要配置 private static final String _path = "com.chat.commons.property.sql"; private static ResourceReader _instance = null; private Map _sqlMap = new HashMap(); private ResourceReader() { try { ResourceBundle bundle = ResourceBundle.getBundle(_path); Enumeration enumeration = bundle.getKeys(); while (enumeration.hasMoreElements()) { String key = (String) enumeration.nextElement(); _sqlMap.put(key, bundle.getString(key)); } } catch (MissingResourceException e) { e.printStackTrace(); } } public synchronized static void initConfigFile() { if (_instance == null) _instance = new ResourceReader(); } public static Map getSqlMap() { return _instance._sqlMap; } public static void main(String args[]) { new ResourceReader(); } }
sql.properties 保存sql语句
sql001=select password from t_qq_user where qq_num = ?
用法:
//参数是sqlId和 qq号, sql001=select password from t_qq_user where qq_num = ? new DBAccess().executeQuery("sql001", new String[]{"123456"});
您还没有登录,请您登录后再发表评论
java实现数据库连接池的模拟
基于JAVA语言的一种有效的数据库连接池的实现代码。
JAVA 使用数据库连接池连接Oracle数据库,全代码,附加详细说明
在Java语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁
主要介绍了Java实现数据库连接池的方法,涉及java数据库连接池的创建、连接、刷新、关闭及状态获取的常用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
主要为大家介绍了Java实现数据库连接池简易教程,感兴趣的小伙伴们可以参考一下
详细介绍常用Java各数据库连接池配置,包括C3P0,DBCP,Proxool等。
JAVA 完整的数据库连接池实现 可以配置根据自己需要
此类非常简单,免去了网上众多资料里所说的麻烦的tomcat配置,更强...不仅oracle,mysql,sqlserver2000都行,因为它依据的是你自己连接数据库的驱动。当然首先你要保证你拥有一个能连接自己数据库的对应驱动类。如下面以
使用JAVA中的动态代理实现数据库连接池
java手写数据库连接池,使用maven构建,一共有四个类方法,一个是测试类,测试类使用三个线程去操数据库连接
JAVA数据库连接池 能够减少对内存的消耗 提高了性能
java_jdbc数据库连接池总结 有讲原理,不错
。
基于Java的数据库连接池的研究与实现,谢俊,陈明,介绍了基于Java的数据库的访问机制,对实际应用中出现的问题进行了分析,提出了数据库连接池技术的解决方案,分析了连接池的工作原理,�
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接, 当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。 我们可以通过设定连接池最大连接数...
相关推荐
java实现数据库连接池的模拟
基于JAVA语言的一种有效的数据库连接池的实现代码。
JAVA 使用数据库连接池连接Oracle数据库,全代码,附加详细说明
在Java语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁
主要介绍了Java实现数据库连接池的方法,涉及java数据库连接池的创建、连接、刷新、关闭及状态获取的常用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
主要为大家介绍了Java实现数据库连接池简易教程,感兴趣的小伙伴们可以参考一下
详细介绍常用Java各数据库连接池配置,包括C3P0,DBCP,Proxool等。
JAVA 完整的数据库连接池实现 可以配置根据自己需要
此类非常简单,免去了网上众多资料里所说的麻烦的tomcat配置,更强...不仅oracle,mysql,sqlserver2000都行,因为它依据的是你自己连接数据库的驱动。当然首先你要保证你拥有一个能连接自己数据库的对应驱动类。如下面以
使用JAVA中的动态代理实现数据库连接池
java手写数据库连接池,使用maven构建,一共有四个类方法,一个是测试类,测试类使用三个线程去操数据库连接
JAVA数据库连接池 能够减少对内存的消耗 提高了性能
java_jdbc数据库连接池总结 有讲原理,不错
。
。
基于Java的数据库连接池的研究与实现,谢俊,陈明,介绍了基于Java的数据库的访问机制,对实际应用中出现的问题进行了分析,提出了数据库连接池技术的解决方案,分析了连接池的工作原理,�
数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接, 当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。 我们可以通过设定连接池最大连接数...