proxool是一种java数据库连接池技术。sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。
目前是和dbcp以及c3p0一起,最为常见的三种jdbc连接池技术。
日前,hibernate官方宣布由于bug太多不再支持dbcp,而推荐使用 proxool或c3p0。
下面通过一个demo说明一下如何使用:
项目结构如下:
dblink.java文件中的代码:
package com.bjpowernode.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> select(string sql, object [] params){
list> list = new arraylist>();
try{
connection = this.getconn();
preparedstatement = connection.preparestatement(sql);
if(params != null){
for(int i =0; i
preparedstatement.setobject(i+1, params[i]);//逐一给问号赋值
}
}
resultset = preparedstatement.executequery();
resultsetmetadata rsmd = resultset.getmetadata();
int columncount = rsmd.getcolumncount();
while(resultset.next()){
map map = new hashmap();
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文件中的代码:
mysqlsource
jdbc:mysql://localhost:3306/test
com.mysql.jdbc.driver
60000
30
10
5
1
1
30s,10m,1d
error
true
select current_date
web.xml文件中的代码:
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">
servletconfigurator
org.logicalcobwebs.proxool.configuration.servletconfigurator
xmlfile
web-inf/proxool.xml
1
index.jsp
index.jsp文件中的代码:
首页序号 | 班级名称 | 开班日期 | 结束日期 | 状态 | 操作 |
---|
string sql = "select id, class_name, begin_date, end_date, state from class ";
dblink db = new dblink();
list> list = db.select(sql, null);
int index = 0;
for (map 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 ? "未启用" : "启用");
%>
【 修改】【 查看】【 删除】}
%>
总结
以上所述是小编给大家介绍的java数据库连接池之proxool,希望对大家有所帮助
希望与广大网友互动??
点此进行留言吧!