今天给大家介绍一种新的数据连接池实现方式——proxool数据库连接池,这是一个健壮、易用的连接池。以下通过一个Demo说明一下怎样使用:

项目结构例如以下:

DBLink.java文件里的代码:

package com.ghj.util;

import java.sql.Connection;
import java.sql.DriverManager;
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 DBLink { private Connection connection;
private PreparedStatement preparedStatement;
private ResultSet resultSet; static{
try {
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver"); //载入驱动
}catch (ClassNotFoundException e) {
System.out.println("载入驱动失败!");
e.printStackTrace();
}
} private Connection getConn(){
try {
if(connection==null||connection.isClosed()){
connection = DriverManager.getConnection("proxool.mysqlsource"); //获取连接
}
} catch (SQLException e) {
System.out.println("获取连接失败。");
e.printStackTrace();
}
return connection;
} public List<Map<String, Object>> select(String sql, Object [] params){
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try{
connection = this.getConn();
preparedStatement = connection.prepareStatement(sql);
if(params != null){
for(int i =0; i<params.length; i++){
preparedStatement.setObject(i+1, params[i]);//逐一给问号赋值
}
}
resultSet = preparedStatement.executeQuery();
ResultSetMetaData rsmd = resultSet.getMetaData();
int columnCount = rsmd.getColumnCount();
while(resultSet.next()){
Map<String, Object> map = new HashMap<String, Object>();
for(int i =1; i<=columnCount;i++){
String columnName = rsmd.getColumnName(i);
Object obj = null;
if(rsmd.getColumnTypeName(i).equals("DATE")){
obj = resultSet.getString(columnName);
}else{
obj = resultSet.getObject(columnName);
}
map.put(columnName, obj);
}
list.add(map);
}
}catch(SQLException e){
e.printStackTrace();
}finally{
close();
}
return list;
} private void close(){
try {
if(resultSet != null){
resultSet.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(preparedStatement != null){
preparedStatement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

proxool.xml文件里的代码:

<?xml version="1.0" encoding="UTF-8"?>
<proxool-config>
<proxool>
<alias>mysqlsource</alias>
<driver-url>jdbc:mysql://localhost:3306/test</driver-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver-properties>
<property name="user" value="root" />
<property name="password" value="root" />
</driver-properties>
<!-- 保留线程处于睡眠状态的最长时间 -->
<house-keeping-sleep-time>60000</house-keeping-sleep-time>
<maximum-connection-count>30</maximum-connection-count>
<minimum-connection-count>10</minimum-connection-count>
<!-- 连接池中可用的连接数量(空暇状态) -->
<prototype-count>5</prototype-count>
<maximum-new-connections>1</maximum-new-connections>
<simultaneous-build-throttle>1</simultaneous-build-throttle>
<!-- 连接池使用状态 -->
<statistics>30s,10m,1d</statistics>
<!-- 连接池日志类型 -->
<statistics-log-level>ERROR</statistics-log-level>
<!-- 假设为true,那么每一个被运行的SQL语句将会在运行期被log记录(DEBUG LEVEL) -->
<trace>true</trace> <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
</proxool-config>

web.xml文件里的代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <!-- 连接池 -->
<servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
<init-param>
<param-name>xmlFile</param-name>
<param-value>WEB-INF/proxool.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

index.jsp文件里的代码:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="com.ghj.util.DBLink,java.util.List,java.util.Map"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>首页</title>
</head> <body>
<table width="100%" border="1px">
<tr>
<th>序号 </th><th>班级名称</th><th>开班日期</th><th>结束日期</th><th>状态</th><th>操作</th>
</tr>
<%
String sql = "SELECT id, class_name, begin_date, end_date, state FROM class ";
DBLink db = new DBLink();
List<Map<String, Object>> list = db.select(sql, null);
int index = 0;
for (Map<String, Object> map : list) {
index = index + 1;
int id = Integer.parseInt(map.get("id").toString());
String className = map.get("class_name").toString();
String beginDate = map.get("begin_date").toString();
String endDate = map.get("end_date").toString();
int state = Integer.parseInt(map.get("state").toString());
String stateName = (state == 0 ? "未启用" : "启用");
%>
<tr align="center">
<td><%=index%></td><td><%=className%></td><td><%=beginDate%></td><td><%=endDate%></td><td><%=stateName%></td><td>【<a href="###" onclick="">改动</a>】【<a href="###" onclick="">查看</a>】【<a href="###" onclick="">删除</a>】</td>
</tr>
<%
}
%>
</table>
</body>
</html>

0分下载演示样例

proxool数据库连接池用法的更多相关文章

  1. Java中的BoneCP数据库连接池用法

    http://zhoufoxcn.blog.51cto.com/792419/438277/ C3P0,Proxool,BoneCP,Druid

  2. proxool数据库连接池配置

    proxool.xml构造 <?xml version="1.0" encoding="UTF-8"?> <something-else-en ...

  3. 数据库连接池之Proxool使用

    如果想要搭建一个高效的网站,链接池是必须用到的一部分.而连接池的选择是多种多样的.就现在的软件开发界而言,最为多用的是DBCP, c3p0, 和 proxool.而hibernate推荐使用的是c3p ...

  4. 使用proxool 连接池:No suitable driver found for proxool

    使用proxool连接池时:报错误No suitable driver found for proxool.shide的原因: ①.WEB-INF目录下的lib中没有proxool连接池jar驱动包. ...

  5. java_JDBC,连接数据库方式,RestSet结果集,Statement,PreparedStatement,事务,批处理,数据库连接池(c3p0和Druid)、Apache-DBUtils、

    一.JDBC的概述 1.JDBC为访问不同的数据薛是供了统一的接口,为使用者屏蔽了细节问题.2. Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作 ...

  6. Java数据库连接池封装与用法

    Java数据库连接池封装与用法 修改于抄袭版本,那货写的有点BUG,两个类,一个用法 ConnectionPool类: package com.vl.sql; import java.sql.Conn ...

  7. Java数据库连接池比较(c3p0,dbcp,proxool和BoneCP)

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp21 Java框架数据库连接池比较(c3p0,dbcp和proxool,Bo ...

  8. Spring配置-数据库连接池proxool[转]

    数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正是针对这个问题提出 ...

  9. Java数据库连接池-proxool

    连接池技术的思想: 连接复用(高效.安全),避免数据库频繁建立.关闭的开销 --------------------极客学院(参考lulei) 1.配置文件 <proxool> <! ...

随机推荐

  1. JS --- 延迟加载的几种方式

    标题:JS延迟加载,也就是等页面加载完成之后再加载 JavaScript 文件.  JS延迟加载有助于提高页面加载速度. 1. defer 属性 HTML 4.01 为 <script>标 ...

  2. POJ 3168 排序+扫描

    题意: 思路: 我们可以把每个矩形拆成四条线 与x轴平行的放在一起 与y轴平行的放在一起 排个序 判一判有没有交 有交 则说明不可扩张 统计一下 就可以了 处理的姿势很重要 姿势不对毁一生 //By ...

  3. pycharm做什么

    pycharm做什么 说实话.作为一个Coder.每天在各种IDE中切换编写Code.如果一个IDE Look and Feel总是无形中影响你每天Code Farm的心情.那该是多么不爽的事情.特别 ...

  4. 2017国家集训队作业[agc008f]Black Radius

    2017国家集训队作业[agc008f]Black Radius 时隔4个月,经历了省赛打酱油和中考各种被吊打后,我终于回想起了我博客园的密码= = 题意: ​ 给你一棵树,树上有若干个关键点.选中某 ...

  5. C++中的纯虚函数

    ---恢复内容开始--- 在C++中的一种函数申明被称之为:纯虚函数(pure virtual function).它的申明格式如下 class CShape { public: ; }; 在什么情况 ...

  6. cocos2dx-js学习笔记(一)环境搭建

    本人眼下的学习方向是cocos2dx+js的开发方式,开发调试使用webstrom和火狐浏览器,调试完毕的项目使用cocos2dx+jsb的方式编译到PC或android设备执行.主要时间用在学习,所 ...

  7. HDU 多校联合 6045

    Is Derek lying? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  8. 【问题】VUE 同一页面路由参数变化,数据不刷新

    依赖路由的params参数获取写在created生命周期里面,因为相同路由二次甚至多次加载的关系 没有达到监听,退出页面再进入另一个页面并不会运行created组件生命周期,导致数据还是第一次进入的数 ...

  9. 【Good Bye 2017 A】New Year and Counting Cards

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 是元音字母或者是奇数就递增. [代码] #include <bits/stdc++.h> using namespace ...

  10. GraphX 图数据建模和存储

    背景 简单分析一下GraphX是怎么为图数据建模和存储的. 入口 能够看GraphLoader的函数. def edgeListFile( sc: SparkContext, path: String ...