DBUtils温习2
上篇简单回顾了下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的更多相关文章
- DBUtils温习1
1.简介 Commons DBUtIls是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本极低,但是使用DBUtils却极大的简化了dao层的开发,少些了很多的jdb ...
- 前端框架 EasyUI (0) 重新温习(序言)
几年前,参与过一个项目.那算是一个小型的信息管理系统,BS 结构的,前端用的是基于 jQuery 的 EasyUI 框架. 我进 Team 的时候,项目已经进入开发阶段半个多月了.听说整个项目的框架是 ...
- dbutils基本使用
dbutils的查询,主要用到的是query方法,增加,修改和删除都是update方法,update方法就不讲了 只要创建ResultSetHandler接口不同的实现类对象就可以得到想要的查询结果, ...
- BenUtils组件和DbUtils组件
BenUtils组件和DbUtils组件 [TOC] 1.BenUtils组件 1.1.简介 程序中对javabean的操作很频繁,所有Apache提供了一套开源api,方便javabean的操作!即 ...
- 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】
一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...
- <十六>JDBC_使用 DBUtils 编写通用的DAO
接口 : DAO<T>.java import java.sql.Connection;import java.sql.SQLException;import java.util.List ...
- <十五>JDBC_使用 DBUtils 进行更新、查询操作
详解待续... DBUtilsTest.java import java.sql.Connection;import java.sql.Date;import java.sql.ResultSet;i ...
- DBUtils 笔记
一.DBUtils介绍 apache 什么是dbutils,它的作用 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作.可 ...
- python DBUtils.PooledDB 中 maxcached 和 maxconnections
PooledDB 有这么几个参数 mincached : the initial number of idle connections in the pool (the default of 0 me ...
随机推荐
- C# 委托 事件
一:什么叫委托 通过反射发现,委托其实是一个类,继承自System.MulticastDelegate,但是System.MulticastDelegate这个类是特殊类,不能被继承 二:委托的声明 ...
- [转]Node.JS使用Sequelize操作MySQL
Sequelize官方文档 https://sequelize.readthedocs.io/en/latest/ 本文转自:https://www.jianshu.com/p/797e10fe23 ...
- VB.NET 使用ADODB連接資料庫滙出到EXCEL
'導入命名空間 Imports ADODB Imports Microsoft.Office.Interop Private Sub A1() Dim Sql As StringDim Cnn As ...
- [PHP] PHP多进程处理tcp连接
<?php if(($sock = socket_create(AF_INET, SOCK_STREAM, 0)) < 0) { echo "failed to create s ...
- Codeforces Round #304 (Div. 2) -----CF546
A. Soldier and Bananas A soldier wants to buy w bananas in the shop. He has to pay k dollars for t ...
- 大家好,又是新的一天。今天给大家带来一些新的知识:选择器的种类和css的三种样式
今天我们为大家 选择了 六种 选择器: 1. 标签选择器 2.id选择器 3.class选择器 4.后代选择器 5.子代选择器 6.交集选择器 我们就举三个典型的例子:后代选择器,子代选择器和交集选择 ...
- WORLD 目录排版调整
文本如下: ----------------------------------------------------------------- 前言1 简介2 我爱你3 圣灵丹方士大夫4 阿类似的看风 ...
- vuejs2.0运用原生js实现简单的拖拽元素功能
<!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...
- Spring声明式事务配置
1.首先在/WEB-INF/applicationContext.xml添加以下内容: <!-- 配置事务管理器 --> <bean id="transactionMana ...
- 基于Docker的TensorFlow机器学习框架搭建和实例源码解读
概述:基于Docker的TensorFlow机器学习框架搭建和实例源码解读,TensorFlow作为最火热的机器学习框架之一,Docker是的容器,可以很好的结合起来,为机器学习或者科研人员提供便捷的 ...