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&amp;useUnicode=true&amp;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的数据库的增删改查的更多相关文章

  1. python代理池的构建4——mongdb数据库的增删改查

    上一篇博客地址:python代理池的构建3--爬取代理ip 一.mongdb数据库的增删改查(Mongo_pool.py) #-*-coding:utf-8-*- ''' 实现代理池的数据库模块 ●作 ...

  2. 通过JDBC进行简单的增删改查(以MySQL为例)

    目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 ( ...

  3. java jdbc 连接mysql数据库 实现增删改查

    好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...

  4. 【转载】通过JDBC对MySQL数据库的增删改查

    通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...

  5. 通过JDBC进行简单的增删改查

    通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...

  6. 通过JDBC进行简单的增删改查(以MySQL为例) 目录

    通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...

  7. Java通过JDBC进行简单的增删改查(以MySQL为例)

    Java通过JDBC进行简单的增删改查(以MySQL为例) 目录: 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JD ...

  8. JDBC进行简单的增删改查

    一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 (3)insert (4)up ...

  9. DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

    DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类) 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据 ...

随机推荐

  1. iOS.mach_absolute_time

    1. Technical Q&A QA1398 Mach Absolute Time Units https://developer.apple.com/library/mac/qa/qa13 ...

  2. ASCII码表以及不同进制间的O(1)转换

    ASCII码表以及不同进制间的O(1)转换          一.ASCII码表 ASCII全称为American Standard Code for Information Interchange, ...

  3. nginx指令中的优化(配置文件)

    nginx指令中的优化(配置文件)worker_processes 8; nginx进程数,建议按照cpu数目来指定,一般为它的倍数.worker_cpu_affinity 00000001 0000 ...

  4. 拼图类APP原型模板分享——简拼

    简拼是一款记录美好.抒写情怀的拼图APP,模板设计风格简约文艺,种类齐全. 此原型模板所用到的组件有标签组.水平分隔线.圆形工具.交互动作有结合标签组实现页面跳转,选择组件触发按钮状态变化等. 此原型 ...

  5. 重新学pytorch

    安装: conda install pytorch -c pytorch pip3 install torchvision pip install torchtext 这3个命令就够了

  6. jquery ajax 全局事件

    jquery的ajax方法的全部全局事件:(不管是$.ajax().$.get().$.load().$.getJSON()等都会默认触发全局事件) ajaxStart:ajax请求开始前 ajaxS ...

  7. nginx设置代理配置

    server {                 listen  8086;                 resolver 8.8.8.8;                 location /{ ...

  8. 【搜索】棋盘问题(DFS)

    Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...

  9. 【转】mysql 解事务锁

    ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 原创 2014年07月31日 10:59:43 5 ...

  10. top k问题

    1.top k问题 在海量数据处理中,经常会遇到的一类问题:在海量数据中找出出现频率最高的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为top K问题.例如,在搜索引擎中,统计搜索最 ...