上篇简单回顾了下DBUtils的简介和其常用的类,这篇博客结合C3P0连接池,做一个简单的增删改查操作

1.创建web项目,导入jar包

2.编写c3p0-config.xml和引入工具类

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config> <default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3307/test</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">20</property>
</default-config> </c3p0-config>
package DBUtils温习;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class DataSourceUtils { private static DataSource dataSource = new ComboPooledDataSource(); private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>(); // 直接可以获取一个连接池
public static DataSource getDataSource() {
return dataSource;
} public static Connection getConnection() throws SQLException{
return dataSource.getConnection();
} // 获取连接对象
public static Connection getCurrentConnection() throws SQLException { Connection con = tl.get();
if (con == null) {
con = dataSource.getConnection();
tl.set(con);
}
return con;
} // 开启事务
public static void startTransaction() throws SQLException {
Connection con = getCurrentConnection();
if (con != null) {
con.setAutoCommit(false);
}
} // 事务回滚
public static void rollback() throws SQLException {
Connection con = getCurrentConnection();
if (con != null) {
con.rollback();
}
} // 提交并且 关闭资源及从ThreadLocall中释放
public static void commitAndRelease() throws SQLException {
Connection con = getCurrentConnection();
if (con != null) {
con.commit(); // 事务提交
con.close();// 关闭资源
tl.remove();// 从线程绑定中移除
}
} // 关闭资源方法
public static void closeConnection() throws SQLException {
Connection con = getCurrentConnection();
if (con != null) {
con.close();
}
} public static void closeStatement(Statement st) throws SQLException {
if (st != null) {
st.close();
}
} public static void closeResultSet(ResultSet rs) throws SQLException {
if (rs != null) {
rs.close();
}
} }

3.编写实体类

package domain;

public class Student {

    private int id;
private String name;
private String sex; public void setId(int id) {
this.id = id;
} public void setName(String name) {
this.name = name;
} public void setSex(String sex) {
this.sex = sex;
} public int getId() {
return id;
} public String getName() {
return name;
} public String getSex() {
return sex;
} }

4.编写测试类

package DBUtils温习;
/*
* 测试类
*/ 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 org.junit.Test; import domain.Student; public class test { @Test
public void add() {
try {
// 1.获取核心类
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
// 2.编写sql语句
String sql = "insert into student values(?,?,?)";
// 3.设置占位符
Object params[] = { 12, "王三", "女" };
// 4.执行添加操作
int updateRow = qr.update(sql, params);
if (updateRow > 0) {
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} @Test
public void deleteById() {
try {
// 1.获取核心类
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
// 2.编写sql语句
String sql = "delete from student where id=?";
// 3.设置占位符
Object params[] = { 11 };
// 4.执行删除操作
int updateRow = qr.update(sql, params);
if (updateRow > 0) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} @Test
public void update() {
try {
// 1.获取核心类
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
// 2.编写sql语句
String sql = "update student set name=?,sex=? where id=? ";
// 3.设置占位符
Object params[] = { "王四", "男", 12 };
// 4.执行更新操作
int updateRow = qr.update(sql, params);
if (updateRow > 0) {
System.out.println("更新成功");
} else {
System.out.println("更新失败");
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} @Test
/*
* 根据ID查询某个学生
*/
public void findById() {
try {
// 1.获取核心类
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
// 2.编写sql语句
String sql = "select * from student where id=? ";
// 3.设置占位符
Object params[] = { 12 };
// 4.执行查询操作
Student student = qr.query(sql, new BeanHandler<Student>(Student.class), params);
System.out.println(student.getName() + " : " + student.getSex());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} @Test
/*
* 查询所有的学生
*/
public void findAllStudent() {
try {
// 1.获取核心类
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
// 2.编写sql语句
String sql = "select * from student ";
// 3.执行查询操作
List<Student> students = qr.query(sql, new BeanListHandler<Student>(Student.class));
// 4.对结果集进行遍历
for (Student student : students) {
System.out.println(student.getName() + " : " + student.getSex());
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} @Test
/*
* 查询学生的总数
*/
public void totalStudent() {
try {
// 1.获取核心类
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
// 2.编写sql语句
String sql = "select count(*) from student ";
// 3.执行查询操作
Long count = (Long) qr.query(sql, new ScalarHandler());
System.out.println(count.intValue());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}

5.补充

qr.query()返回object类型 ,先转成 ScalarHandler的Long类型 然后在转为 int类型
return ((Long) qr.query(sql, new ScalarHandler())).intValue();

DBUtils温习2的更多相关文章

  1. DBUtils温习1

    1.简介 Commons DBUtIls是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本极低,但是使用DBUtils却极大的简化了dao层的开发,少些了很多的jdb ...

  2. 前端框架 EasyUI (0) 重新温习(序言)

    几年前,参与过一个项目.那算是一个小型的信息管理系统,BS 结构的,前端用的是基于 jQuery 的 EasyUI 框架. 我进 Team 的时候,项目已经进入开发阶段半个多月了.听说整个项目的框架是 ...

  3. dbutils基本使用

    dbutils的查询,主要用到的是query方法,增加,修改和删除都是update方法,update方法就不讲了 只要创建ResultSetHandler接口不同的实现类对象就可以得到想要的查询结果, ...

  4. BenUtils组件和DbUtils组件

    BenUtils组件和DbUtils组件 [TOC] 1.BenUtils组件 1.1.简介 程序中对javabean的操作很频繁,所有Apache提供了一套开源api,方便javabean的操作!即 ...

  5. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

  6. <十六>JDBC_使用 DBUtils 编写通用的DAO

    接口 : DAO<T>.java import java.sql.Connection;import java.sql.SQLException;import java.util.List ...

  7. <十五>JDBC_使用 DBUtils 进行更新、查询操作

    详解待续... DBUtilsTest.java import java.sql.Connection;import java.sql.Date;import java.sql.ResultSet;i ...

  8. DBUtils 笔记

    一.DBUtils介绍  apache 什么是dbutils,它的作用 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作.可 ...

  9. python DBUtils.PooledDB 中 maxcached 和 maxconnections

    PooledDB 有这么几个参数 mincached : the initial number of idle connections in the pool (the default of 0 me ...

随机推荐

  1. TensorFlow(3)CNN中的函数

    tf.nn.conv2d()函数 参数介绍: tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=Non ...

  2. 类似aaa?a=1&b=2&c=3&d=4,如何将问号以后的数据变为键值对

    string result = "aaa?a=1&b=2&c=3&d=4"; string[] array = result.Split('?'); //s ...

  3. Layui table 组件的使用:初始化加载数据、数据刷新表格、传参数

    背景 笔者之前一直使用 bootstrap table ,因为当前项目中主要使用 Layui 框架,于是也就随了 Layui table ,只是在使用的时候出现了一些问题,当然也是怪自己不熟悉的锅吧! ...

  4. [PHP] PHP闭包(closures)

    1.闭包函数也叫匿名函数,一个没有指定名称的函数,一般会用在回调部分 2.闭包作为回调的基本使用, echo preg_replace_callback('~-([a-z])~', function ...

  5. struts2_Action的三种实现方式

    1.普通java类 package com.ahd.action; public class HelloAction{ public String execute() throws Exception ...

  6. 【Java每日一题】20170213

    20170210问题解析请点击今日问题下方的“[Java每日一题]20170213”查看(问题解析在公众号首发,公众号ID:weknow619) package Feb2017; public cla ...

  7. python面向对象学习(六)类属性、类方法、静态方法

    目录 1. 类的结构 1.1 术语 -- 实例 1.2 类是一个特殊的对象 2. 类属性和实例属性 2.1 概念和使用 2.2 属性的获取机制 3. 类方法和静态方法 3.1 类方法 3.2 静态方法 ...

  8. 《JavaScript高级程序设计》笔记:引用类型(五)

    Object类型 创建object实例方法有两种.第一种方法使用new操作符后跟object构造函数.如下: var person=new Object(); person.name="Ni ...

  9. 【机器学习基本理论】详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解

    [机器学习基本理论]详解最大似然估计(MLE).最大后验概率估计(MAP),以及贝叶斯公式的理解 https://mp.csdn.net/postedit/81664644 最大似然估计(Maximu ...

  10. Jedis 简单案例

    POM 依赖 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> < ...