采用c3p0数据库连接池底层是jdbc的数据库的增删改查
1.新建dbutils包,里面是JdbcUtils类:
package cn.com.xxx.xxx.dbutil; import java.sql.Connection;
import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class JdbcUtils { /*
*释放数据库的连接
*
*/
public static void releaseConnection(Connection connection){ try {
if(connection !=null){
connection.close();
}
} catch (Exception e) {
e.printStackTrace();
}
} private static DataSource dataSource=null;
static {
/*
* 数据源只能被创建一次
*/
dataSource=new ComboPooledDataSource("stormTest");
} public static Connection getConnection() throws SQLException{
//dataSource=new ComboPooledDataSource("mvcapp");若要是放在这里就说明,获得一次就创建一下,比较耗费内存
return dataSource.getConnection();
} }
2.c3p0的配置文件:c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <named-config name="stormTest"> <property name="user">root</property>
<property name="password">12345678</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/ies?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf-8</property> <property name="acquireIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">10</property>
<property name="maxPoolSize">50</property> <property name="maxStatements">20</property>
<property name="maxStatementsPerConnection">5</property> </named-config>
</c3p0-config>
rewriteBatchedStatements=true 这个是配置mysql数据库批量处理(批量插入,删除,更新)的一个配置项
<named-config name="stormTest"> 中的stormTest,要跟JdbcUtils.java中的
dataSource=new ComboPooledDataSource("stormTest"); 构造函数的参数一致
3.写基本的Dao:(包含QueryRunner的批处理方法)
package cn.com.sgcc.gdt.dao; import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.Connection;
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 cn.com.sgcc.gdt.dbutil.JdbcUtils; public class Dao<T> { private QueryRunner queryRunner=new QueryRunner();
private Class<T> clazz; public Dao(){
Type superClass=getClass().getGenericSuperclass();
if(superClass instanceof ParameterizedType){
ParameterizedType parameterizedType= (ParameterizedType) superClass; Type[] typeArgs=parameterizedType.getActualTypeArguments();
if(typeArgs!=null&&typeArgs.length>0){
if(typeArgs[0] instanceof Class){
clazz=(Class<T>) typeArgs[0];
}
}
}
}
/*
*这个方法是只获取,表格中的某一行属性中的某一个属性值,就是返回某一个字段的值,例如返回某一条记录的customerName,或者返回数据表中有多少条记录等。
*/
public <E> E getForValue(String sql,Object ... args){
Connection connection=null;
try {connection=JdbcUtils.getConnection();
return (E) queryRunner.query(connection, sql, new ScalarHandler(), args);
} catch (Exception e) {
e.printStackTrace();
}finally{
JdbcUtils.releaseConnection(connection);
}
return null;
} /*
* 该方法是返回一组数据对象实体类,返回T所对应的List,其实质就是查询
*/
public List<T> getForList(String sql,Object ... agrs ){
Connection connection=null;
try {connection=JdbcUtils.getConnection();
return queryRunner.query(connection, sql, new BeanListHandler<T>(clazz), agrs);
} catch (Exception e) {
e.printStackTrace();
}finally{
JdbcUtils.releaseConnection(connection);
}
return null;
}
/*执行查询的语句,结果是返回数据表中的一个对象(一条记录)其实质就是查询!
*/
public T get(String sql,Object ... agrs){ Connection connection=null;
try {connection=JdbcUtils.getConnection();
return queryRunner.query(connection, sql, new BeanHandler<T>(clazz), agrs);
} catch (Exception e) {
e.printStackTrace();
}finally{
JdbcUtils.releaseConnection(connection);
}
return null;
}
/*
* 该方法封装了INSERT、UPDATE、DELETE操作
* sql是sql语句
* args是占位符
* result 1:代表操作成功; 0:代表操作失败
*/
public int update(String sql,Object ... args){
Connection connection=null;
int result =0;
try {connection=JdbcUtils.getConnection();
result=queryRunner.update(connection, sql, args); } catch (Exception e) {
e.printStackTrace();
}finally{
JdbcUtils.releaseConnection(connection);
}
return result;
} /**
* 批处理
* @param sql
* @param args :二维数组,高维确定执行sql语句的次数,低维是给?赋值
* @return
*/
public void batchUpdate(String sql,Object[][] args){
Connection connection = null;
//int result = 0;
try {connection=JdbcUtils.getConnection();
queryRunner.batch(connection, sql, args); } catch (Exception e) {
e.printStackTrace();
}finally{
JdbcUtils.releaseConnection(connection);
} }
}
4.写要查询结果的封装对象javabean,注意:Javabean中的属性需要和查询的表的属性一致(JDBC没有rowmapper,所以对于数据别名可以在sql查询语句中 as ‘新的表头名字’)
package cn.com.sgcc.gdt.bean; import java.io.Serializable;
import java.util.Date; /**
* 当前值(update)
* @author Joy
*
*/
public class StatusCurrent implements Serializable{ /**
*
*/
private static final long serialVersionUID = 1L;
/**监测对象编码*/
private String MS_NO;
/**指标编码*/
private String INDI_NO;
/**数据类型*/
private String DATA_TYPE;
/**数据刷新时间*/
private Date REFRESH_TIME;
/**数据值*/
private Double RVAL;
public String getMS_NO() {
return MS_NO;
}
public void setMS_NO(String mS_NO) {
MS_NO = mS_NO;
}
public String getINDI_NO() {
return INDI_NO;
}
public void setINDI_NO(String iNDI_NO) {
INDI_NO = iNDI_NO;
}
public String getDATA_TYPE() {
return DATA_TYPE;
}
public void setDATA_TYPE(String dATA_TYPE) {
DATA_TYPE = dATA_TYPE;
}
public Date getREFRESH_TIME() {
return REFRESH_TIME;
}
public void setREFRESH_TIME(Date rEFRESH_TIME) {
REFRESH_TIME = rEFRESH_TIME;
}
public Double getRVAL() {
return RVAL;
}
public void setRVAL(Double rVAL) {
RVAL = rVAL;
}
public StatusCurrent() {
super();
}
@Override
public String toString() {
return "StatusCurrent [MS_NO=" + MS_NO + ", INDI_NO=" + INDI_NO
+ ", DATA_TYPE=" + DATA_TYPE + ", REFRESH_TIME=" + REFRESH_TIME
+ ", RVAL=" + RVAL + "]";
}
public StatusCurrent(String mS_NO, String iNDI_NO, String dATA_TYPE,
Date rEFRESH_TIME, Double rVAL) {
super();
MS_NO = mS_NO;
INDI_NO = iNDI_NO;
DATA_TYPE = dATA_TYPE;
REFRESH_TIME = rEFRESH_TIME;
RVAL = rVAL;
} }
5.写某个表进行增删改查的dao接口:
package cn.com.sgcc.gdt.dao; import java.util.List; import cn.com.sgcc.gdt.bean.StatusCurrent; public interface StatusCurrentDao { public int update(StatusCurrent sd); public int save(StatusCurrent sd); public void batchUpdate(List<StatusCurrent> sds); public void batchSave(List<StatusCurrent> sds);
}
6.5中接口的实现类(批量插入和批量删除,批量更新的代码):
package cn.com.sgcc.gdt.daoImpl; import java.util.List; import cn.com.sgcc.gdt.bean.StatusCurrent;
import cn.com.sgcc.gdt.dao.Dao;
import cn.com.sgcc.gdt.dao.StatusCurrentDao; public class StatusCurrentDaoJdbcImpl extends Dao<StatusCurrent> implements
StatusCurrentDao { @Override
public int update(StatusCurrent sc) {
String sql ="update r_status_curr set data_type=?,rval=?,refresh_time=? where ms_no=? and indi_no=?";
return update(sql,sc.getDATA_TYPE(),sc.getRVAL(),sc.getREFRESH_TIME(),sc.getMS_NO(),sc.getINDI_NO()); } @Override
public int save(StatusCurrent sd) {
String sql = "insert into r_status_curr(ms_no,data_type,indi_no,rval,refresh_time) values(?,?,?,?,?)";
return update(sql,sd.getMS_NO(),sd.getDATA_TYPE(),sd.getINDI_NO(),sd.getRVAL(),sd.getREFRESH_TIME());
} @Override
public void batchUpdate(List<StatusCurrent> sds) {
String sql ="update r_status_curr set rval=? where ms_no=? and indi_no=? ";
Object[][] params = new Object[sds.size()][];
for (int i = 0; i < sds.size(); i++) {
params[i] = new Object[]{sds.get(i).getRVAL(),sds.get(i).getMS_NO(),sds.get(i).getINDI_NO()};
} batchUpdate(sql, params);
} @Override
public void batchSave(List<StatusCurrent> sds) {
String sql = "insert into r_status_curr(ms_no,data_type,indi_no,rval,refresh_time) values(?,?,?,?,?)";
Object[][] params = new Object[sds.size()][];
for (int i = 0; i < sds.size(); i++) {
params[i] = new Object[]{sds.get(i).getMS_NO(),sds.get(i).getDATA_TYPE(),sds.get(i).getINDI_NO(),sds.get(i).getRVAL(),sds.get(i).getREFRESH_TIME()};
} batchUpdate(sql, params); } /*@Override
public void batchUpdate(List<StatusCurrent> sds) {
String sql ="replace into r_status_curr (ms_no,indi_no,data_type,rval,refresh_time) values (?,?,?,?,?)";
Object[][] params = new Object[sds.size()][];
for (int i = 0; i < sds.size(); i++) {
params[i] = new Object[]{sds.get(i).getMS_NO(),sds.get(i).getINDI_NO(),sds.get(i).getDATA_TYPE(),sds.get(i).getRVAL(),sds.get(i).getREFRESH_TIME()};
} batchUpdate(sql, params);
}*/ }
7.普通调用:
private static StatusCurrentDao statusCurrentDao = new StatusCurrentDaoJdbcImpl();
statusCurrentDao.方法名字()就可以使用了
采用c3p0数据库连接池底层是jdbc的数据库的增删改查的更多相关文章
- python代理池的构建4——mongdb数据库的增删改查
上一篇博客地址:python代理池的构建3--爬取代理ip 一.mongdb数据库的增删改查(Mongo_pool.py) #-*-coding:utf-8-*- ''' 实现代理池的数据库模块 ●作 ...
- 通过JDBC进行简单的增删改查(以MySQL为例)
目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 ( ...
- java jdbc 连接mysql数据库 实现增删改查
好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...
- 【转载】通过JDBC对MySQL数据库的增删改查
通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...
- 通过JDBC进行简单的增删改查
通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...
- 通过JDBC进行简单的增删改查(以MySQL为例) 目录
通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...
- Java通过JDBC进行简单的增删改查(以MySQL为例)
Java通过JDBC进行简单的增删改查(以MySQL为例) 目录: 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JD ...
- JDBC进行简单的增删改查
一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 (3)insert (4)up ...
- DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类) 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据 ...
随机推荐
- iOS.Animation.CAMediaTiming
CAMediaTiming Protocol CALayre 和 CAAnimation 实现了CAMediaTiming 接口. CAMediaTiming 定义了8个属性. speed属性: Co ...
- Linux网卡绑定探析
2013-08-20 15:39:31 现在很多服务器都自带双千兆网口,利用网卡绑定既能增加网络带宽,同时又能做相应的冗余,目前应用于很多的场景.linux操作系统下自带的网卡绑定模式,Linux b ...
- Ubuntu下安装VS code
sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make sudo apt-get update sudo apt-get install ubun ...
- POJ3694 Network - Tarjan + 并查集
Description 给定$N$个点和 $M$条边的无向联通图, 有$Q$ 次操作, 连接两个点的边, 问每次操作后的图中有几个桥 Solution 首先Tarjan找出边双联通分量, 每个双联通分 ...
- 20172306 《Java程序设计与数据结构》第七周学习总结
20172306<Java程序设计>第七周学习总结 教材学习内容总结 这一章的标题是继承.主要学习了有关继承的相关知识.其中在这五节中,我学到了以下几点: 1.继承主要表达的是" ...
- requestAnimationFrame 完美兼容封装
完美兼容封装: (function() { var lastTime = 0; var vendors = ['webkit', 'moz']; for(var x = 0; x < vendo ...
- samtools flagstat
samtools flagstat命令简介: 统计输入文件的相关数据并将这些数据输出至屏幕显示.每一项统计数据都由两部分组成,分别是QC pass和QC failed,表示通过QC的reads数据量和 ...
- RSS工具关注期刊,方便快速获取及时大量的文献信息
第一步: 第二步: 第三步: RSS : 很好的一个东西,到了中国,咋就水土不服了呢...
- Windows-universal-samples学习笔记系列三:Navigation
Navigation Back Button Master/detail Navigation menu (XAML) Pivot Projection XHR, handling navigatio ...
- java中HashMap的基本方法使用
遍历,添加词,等等 package test; import java.util.HashMap; import java.util.Iterator; import java.util.ArrayL ...