采用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,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据 ...
随机推荐
- BZOJ1925或洛谷2467 [SDOI2010]地精部落
BZOJ原题链接 洛谷原题链接 先讲下关于波动数列的\(3\)个性质. 性质\(1\):对于数列中的每一对\(i\)和\(i + 1\),若它们不相邻,那么交换这两个数形成的依旧是一个波动数列. 性质 ...
- APP强制退出
第一种方法: 企业版可以用,Appstore可能被拒,慎用 - (void)exitApplication { AppDelegate *app = [UIApplication sharedAppl ...
- Laravel自定义Api接口全局异常处理
在做API时,需要对一些异常进行全局处理,比如添加用户执行失败时,需要返回错误信息 // 添加用户 www.bcty365.com $result = User::add($user); if(emp ...
- 第一次java实验报告
实验一Java开发环境的熟悉-1 步骤: mkdir +20165213exp1创建20165213exp1这个目录 cd +20165213zqh进入这个目录 mkdir+src+bin创建目录sr ...
- Intellij idea 系列教程目录
Intellij idea 系列教程目录 Intellij idea 系列教程之破解方法 Intellij idea 系列教程之常用快捷键 Intellij idea 系列教程之常用配置项 每天用心记 ...
- Minimum Window Substring LT76
Given a string S and a string T, find the minimum window in S which will contain all the characters ...
- openssl编译安装-各种蛋疼
arm平台 ubuntu Linux xxxxxx 3.0.62 #2 PREEMPT Tue Apr 2 20:14:12 CST 2013 armv7l armv7l armv7l GNU/Li ...
- NOIP2017提高组预赛详解
NOIP2017预赛终于结束了. 普遍反映今年的卷子难度较大,但事实上是这样吗?马上我将为您详细地分析这张试卷,这样你就能知道到底难不难. 对了答案,鄙人考得还是太差了,只有91分. 那么下面我们就一 ...
- oracle 导出表
由于进项目组是跟着dba做事情的,但是没做多久dba走了,差不多就把数据库方面的“杂事”接下来了. 小白一个,只有敬小慎微的操作.经常看到的高水位和低水位的情况,也不敢去乱动. 搞好今天晚上需要跑数据 ...
- mysql update受影响的行数为0或查询结果为空时
当执行update语句时,如果受影响的行数是0,返回的也是true. $conn = new mysqli(); $sql = "update ..."; $query = $co ...