编写DBCP连接池
#配置数据库数据源
package com.itang.utils; import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; public class DBCPUtil { private static DataSource dataSource;
static{
try {
InputStream in = DBCPUtil.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
Properties props = new Properties();
props.load(in);
dataSource = BasicDataSourceFactory.createDataSource(props);
} catch (Exception e) {
e.printStackTrace();
throw new ExceptionInInitializerError(e);
}
} public static DataSource getDataSource(){
return dataSource;
}
public static Connection getConnection(){
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);
}
} /**
* 功能:关闭数据库连接资源
* @param rs
* ResultSet对象
* @param st
* Statement 对象
* @param conn
* Connection对象
*/
public static void closeSource(ResultSet rs, Statement st, Connection conn)
{
if(rs!=null)
{
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
closeSource(st,conn);
}
}
} public static void closeSource(Statement st, Connection conn) {
if(st!=null)
{
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(conn!=null)
{
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
获取配置文件的属性值
public class GetDefaultValue {
private static String defaultimagepath;
private static String defaultimagename;
static {
ResourceBundle bundle=ResourceBundle.getBundle("defaultvalueconfig");
defaultimagepath = bundle.getString("defaultimagepath");
defaultimagename = bundle.getString("defaultimagename");
}
public static String getDefaultimagepath()
{
return defaultimagepath;
}
public static String getDefaultimagename()
{
return defaultimagename;
}
}
利用common-dbutils.jar和common-dbcp.jar工具来操作数据库:
注意查询的时候:
QueryRunner qr = new QueryRunner(dataSource);
qr.query(sql, new BeanHandler<User>(User.class));查询对象
qr.query(sql, new BeanListHandler<User>(User.class));查询对象列表
qr.query(sql, new ScalarHandler<>());返回单个值
具体可以参考下面代码:
package com.itwang.dao.impl; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler; import com.itwang.dao.InterestNumberDao;
import com.itwang.domain.InterestCard;
import com.itwang.domain.InterestNumber;
import com.itwang.utils.DBCPUtil; public class InterestNumberDaoImpl implements InterestNumberDao {
private QueryRunner qr = new QueryRunner(DBCPUtil.getDataSource());
@Override
public void save(InterestNumber interestNumber) {
// TODO Auto-generated method stub
try {
qr.update("insert into interestnumber(id,name,follownumber,description,path,filename) values(?,?,?,?,?,?)",interestNumber.getId(),interestNumber.getName(),interestNumber.getFollownumber(),interestNumber.getDescription(),interestNumber.getPath(),interestNumber.getFilename());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public List<InterestNumber> findAllInterestNumber() {
// TODO Auto-generated method stub
List<InterestNumber> list=null;
try {
list=qr.query("select * from interestNumber",new BeanListHandler<InterestNumber>(InterestNumber.class));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
@Override
public void deleteInterestNumber(String id) {
// TODO Auto-generated method stub
try {
qr.update("delete from interestnumber where id=?", id);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public InterestNumber findInterestNumberById(String id) {
// TODO Auto-generated method stub
InterestNumber interestNumber= null;
try {
interestNumber=qr.query("select * from interestnumber where id=?", new BeanHandler<InterestNumber>(InterestNumber.class), id);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return interestNumber;
}
@Override
public void updateInterestNumber(InterestNumber interestNumber) {
// TODO Auto-generated method stub
try {
qr.update("update interestnumber set name=?,follownumber=?,description=?,path=?,filename=? where id=?",interestNumber.getName(),interestNumber.getFollownumber(),interestNumber.getDescription(),interestNumber.getPath(),interestNumber.getFilename(),interestNumber.getId());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public int checkStatusInterestNumber(String id, String interestnumberid) {
// TODO Auto-generated method stub
Long count=null;
try {
count=qr.query("select count(*) from interestrelative where uid=? and pid=?",new ScalarHandler<>(), id,interestnumberid);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(count.intValue()>0)
return 1;
else
return 0;
}
@Override
public void deleteRelative(String uid, String pid) {
// TODO Auto-generated method stub
try {
qr.update("delete from interestrelative where uid=? and pid=?", uid,pid);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void addRelative(String id,String uid, String pid) {
// TODO Auto-generated method stub
try {
qr.update("insert into interestrelative(id,uid,pid) values(?,?,?)",id, uid,pid);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public List<InterestNumber> findInterestNumberByKeywords(String searchKeywords) {
// TODO Auto-generated method stub
List<InterestNumber> list=null;
String sqlstring="select * from interestnumber where name like CONCAT('%', ?, '%')";
try {
list=qr.query(sqlstring,new BeanListHandler<InterestNumber>(InterestNumber.class),searchKeywords );
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
@Override
public void updateFollowNumber(int totalUser,String pid) {
// TODO Auto-generated method stub
try {
qr.update("update interestnumber set follownumber=? where id=?",totalUser,pid);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public int getTotalUserByPid(String pid) {
// TODO Auto-generated method stub
Long total=null;
try {
total=qr.query("select count(*) from interestrelative where pid=?", new ScalarHandler<>(), pid);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return total.intValue();
}
@Override
public void addInteretCard(InterestCard interestCard) {
// TODO Auto-generated method stub
try {
qr.update("insert into interestcard(id,datetime,title,content,uid,pid) values(?,?,?,?,?,?)",interestCard.getId(),interestCard.getDatetime(),interestCard.getTitle(),interestCard.getContent(),interestCard.getUser().getId(),interestCard.getInterestnumber().getId());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
编写DBCP连接池的更多相关文章
- DBCP连接池的使用
1.新建工程 2.导入commons-dbcp commons-logging commons-pool这三个包 3.创建dbcpconfig.properties的文件 实例如下 #连接设置 dri ...
- DBCP 连接池
DBCP数据源 DBCP 是 Apache 软件基金组织下的开源连接池实现 导入maven包: <!-- dbcp连接池 --> <dependency> <groupI ...
- DBUtils工具类和DBCP连接池
今日内容介绍 1.DBUtils2.处理结果集的八种方式3.连接池4.连接池的用法1 PrepareStatement接口预编译SQL语句 1.1 预处理对象 * 使用PreparedStatemen ...
- DBCP连接池简介
DBCP连接池简介 1.数据库连接基础 数据库连接池基础主要包括以下三个方面的内容:数据库连接池的基本概念.数据库连接池的工作原理.Java开源的连接池.下面将从这三个方面一一介绍: (1)数据库连接 ...
- 采用DBCP连接池技术管理连接
DBCP的使用步骤步骤一:导包,使用第三方的道具,必须导入相应的jar包. 一般需要导入两个jar包: -commons-dbcp-1.x.jar包 -commons-pool-1.x.x.jar包 ...
- DBCP连接池使用问题
问题现象: 启动应用,访问无压力,一切正常,一段时间过后,应用访问异常. 问题分析: 1.web容器线程爆满,拒绝服务.由于应用并发量大,线程响应时间长增加,线程池连接数逐步递增直到爆满,导致应用拒绝 ...
- DBCP连接池介绍
DBCP连接池介绍 ----------------------------- 目前 DBCP 有两个版本分别是 1.3 和 1.4. DBCP 1.3 版本需要运行于 JDK 1.4-1.5 ,支持 ...
- DBCP连接池原理分析及配置用法
DBCP连接池介绍 ----------------------------- 目前 DBCP 有两个版本分别是 1.3 和 1.4. DBCP 1.3 版本需要运行于 JDK 1.4-1.5 ,支持 ...
- JNDI和在tomcat中配置DBCP连接池 元数据的使用 DBUtils框架的使用 多表操作
1 JNDI和在tomcat中配置DBCP连接池 JNDI(Java Naming and Directory Interface),Java命名和目录接口,它对应于J2SE中的javax.namin ...
随机推荐
- ParserError: Error tokenizing data. C error: Expected 2 fields in line 15, saw 4
pandas 读取泰坦尼克号数据,报错 %matplotlib inline import numpy as np import pandas as pd import re as re train ...
- lua 5.3 英文手册 自己收集整理版
/* ** state manipulation */ LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud);//创建lua虚拟机 LUA ...
- WEB新手之serialize’s revenge
最后一道题. 这道题提示比较少,一点也不友好.F12也没有什么线索.无奈之下用御剑扫下后台,发现了一个叫robots的txt文件. 打开robots.txt文件,可以得到一段代码,如下图所示. 审查代 ...
- P1444 [USACO1.3]虫洞wormhole
luogu P1444 [USACO1.3]虫洞wormhole 首先感谢ghj的讲解 题目描述 农夫约翰爱好在周末进行高能物理实验的结果却适得其反,导致N个虫洞在农场上(2<=N<=12 ...
- K2路由器刷机笔记
临近双11,K2路由器广告加的越来越放肆,实在太难忍受就刷了个固件.这里把路由器刷机的一般流程记录一下. 一.开启telnet 刷固件,首先要取得路由器系统的控制权,这样我们才能自由的进行操作. 方法 ...
- C#-★结构体★
结构体: 结构体类型是用户自己定义的一种类型,它是由其他类型组合而成的,可包含构造函数.常数.字段.方法.属性.索引器.运算符.事件和嵌套类型的值类型. 结构体在几个方面不同于类:结构体为值类型而不是 ...
- babel初学教程
babel安装 安装前你需要安装node.js和npm以及gulp三个包. 然后执行以下命令 $ npm init 然后在安装 babel和babel-core两个包 $ npm install -- ...
- ElasticSearch 常用设置
2.2.0的启动和6.几 启动路径.端口一样,但是进入Head的路径不一样 http://localhost:9200/ 进入Head的方式2.2 的在 http://localhost:9200/_ ...
- Bi-shoe and Phi-shoe(欧拉筛)
Bamboo Pole-vault is a massively popular sport in Xzhiland. And Master Phi-shoe is a very popular co ...
- [转] docker 部署 odoo
[From] https://blog.csdn.net/qq_36178641/article/details/79775153 1.安装大象数据库. docker run -d -e POSTGR ...