分别使用DBCP和C3P0连接池,对数据库的一张表进行 增删改查操作,并测试事务,如果发生异常事务回滚
DBCP

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;public class DBCPTest {public static void main(String[] args) throws SQLException {//增删改查 测试事务,如果发生异常事务回滚Connection conn = DBCPUtils.getConnection();Statement st = conn.createStatement();//删除 user 表中 id 为 1 的数据String sql = "delete from user where id = 1";int i = st.executeUpdate(sql);DBCPUtils.close(conn,st);}
}

表中 为 id 为1 的数据被删除了

    @Testpublic void Insert() throws SQLException {// 插入Connection conn = DBCPUtils.getConnection();Statement st = conn.createStatement();//插入 id 为 1 的数据String sql = "insert into user values (1,'周武王','F',56,12,'1-1-1',990)";st.executeUpdate(sql);DBCPUtils.close(conn,st);}
}

插入成功

    @Testpublic void testUpdate() throws SQLException {Connection conn = DBCPUtils.getConnection();Statement st = conn.createStatement();//修改id2 的名字String sql = "update user set name = '楚庄王' where id = 2 ";st.executeUpdate(sql);DBCPUtils.close(conn, st);}

    @Testpublic void Select() throws SQLException {Connection conn = DBCPUtils.getConnection();Statement st = conn.createStatement();//查询金钱小于10的用户id name moneyString sql = "select id,name,money from user where money < 10";ResultSet rs = st.executeQuery(sql);while (rs.next()){String id = rs.getString("id");String name = rs.getString("name");String money = rs.getString("money");System.out.println("id: "+id+",\t姓名: "+name+",\t金钱: "+money);}DBCPUtils.close(conn,st ,rs);}

//测试事务public static void Transaction() {Connection conn = null;PreparedStatement ps = null;Scanner sc=null;try {conn = DBCPUtils.getConnection();//开启事务conn.setAutoCommit(false);ps = conn.prepareStatement("insert into dogs values (null,?,?)");sc = new Scanner(System.in);int i = 0;while (i<3){i++;System.out.println("请输入狗狗的姓名:");String name = sc.next();System.out.println("请输入狗狗的年龄:");int age = sc.nextInt();ps.setString(1, name);ps.setInt(2, age);ps.executeUpdate();}DBCPUtils.commit(conn);System.out.println("新增成功..");} catch (SQLException e) {e.printStackTrace();//回滚事务DBCPUtils.rollback(conn);}finally {DBCPUtils.close(conn,ps);assert sc != null;sc.close();}}

插入成功

插入输入数据不是int类型的 发生异常 插入失败 自动回滚 对原有数据没有产生影响

C3B0

package com.qiku.day02.hw;import org.junit.Test;import java.sql.*;
import java.util.Scanner;public class C3B0Test {public static void main(String[] args){Transaction();}@Testpublic void Del() throws SQLException {Connection conn = C3P0Utils.getConnection();Statement st = conn.createStatement();//删除 dogs 表中 id 为 1 的数据String sql = "delete from dogs where id = 1";int i = st.executeUpdate(sql);C3P0Utils.close(conn, st);}@Testpublic void Insert() throws SQLException {// 插入Connection conn = C3P0Utils.getConnection();Statement st = conn.createStatement();//插入 id 为 1 的数据String sql = "insert into dogs values (1,'周武王',3)";st.executeUpdate(sql);C3P0Utils.close(conn, st);}@Testpublic void testUpdate() throws SQLException {Connection conn = C3P0Utils.getConnection();Statement st = conn.createStatement();//修改id2 的名字String sql = "update dogs set dname = '楚庄王' where id = 2 ";st.executeUpdate(sql);C3P0Utils.close(conn, st);}@Testpublic void Select() throws SQLException {Connection conn = C3P0Utils.getConnection();Statement st = conn.createStatement();//查询dogs表String sql = "select * from dogs";ResultSet rs = st.executeQuery(sql);while (rs.next()) {String id = rs.getString("id");String dname = rs.getString("dname");String age = rs.getString("age");System.out.println("id: " + id + ",\t狗名: " + dname + ",\t狗龄: " + age);}C3P0Utils.close(conn, st, rs);}public static void Transaction() {Connection conn = null;PreparedStatement ps = null;Scanner sc=null;try {conn = C3P0Utils.getConnection();//开启事务conn.setAutoCommit(false);ps = conn.prepareStatement("insert into dogs values (null,?,?)");sc = new Scanner(System.in);int i = 0;while (i<3){i++;System.out.println("请输入狗狗的姓名:");String name = sc.next();System.out.println("请输入狗狗的年龄:");int age = sc.nextInt();ps.setString(1, name);ps.setInt(2, age);ps.executeUpdate();}C3P0Utils.commit(conn);System.out.println("新增成功..");} catch (SQLException e) {e.printStackTrace();//回滚事务C3P0Utils.rollback(conn);}finally {C3P0Utils.close(conn,ps);assert sc != null;sc.close();}}
}

B3C0

sql练习 使用储存池相关推荐

  1. 黑群晖二合一已损毁_搬运 如何在黑群晖中重置损毁的储存池/储存空间

    本帖最后由 ieweix 于 2020-11-23 22:05 编辑 如何在黑群晖中重置损毁的储存池/储存空间 萌新请不要看这个教程! 这个教程合适对linux有一定基础的用户 使用本方法前,请备份E ...

  2. cinder配置多ceph储存池[Ceph and Cinder multi-backend]

    2019独角兽企业重金招聘Python工程师标准>>> I. Ceph 要配置Ceph以使用不同的存储设备,请参阅: Ceph 2 speed storage with CRUSH. ...

  3. 1433恢复储存,sql service恢复储存

    第一步执行:[color=darkred]EXEC sp_addextendedproc xp_cmdshell,@dllname ='xplog70.dll'declare @o int [/col ...

  4. SQL SERVER 数据库储存的值里面前后有空格,有可能是全角或者半角空格,如何在查询中处理

    例如 用户表里面的 UserCode 有空格,那么如何查询出来对应的用户 表名 tblUser 字段 UserCode 表记录为3条 '    admin','bbbadmin','abc' 如果用 ...

  5. Node.js SQL数据库操作 (上)(操作MySQL数据库及 数据库连接池)

    文章目录 Node.js MySQL驱动 操作 MySQL 数据库 连接 MySQL 数据库 增删改查操作 防止 SQL 注入攻击 数据库连接池操作 Node.js MySQL驱动 Node.js的原 ...

  6. 精华贴子整理之SQL性能优化2

    五种提高 SQL 性能的方法 发布日期: 4/1/2004 | 更新日期: 4/1/2004 Johnny Papa Data Points Archive 有时, 为了让应用程序运行得更快,所做的全 ...

  7. 经验整理-1-mysqlf索引、sql调优大全、底层结构、SQL分布式事物锁大全总结--100-@

    -----mysql数据结构 MYSQL调优---- ?如何优化数据库性能或MYSQL调优?,工作中你是怎么做的(自述)? (前提---SQL的查询优化器--分析并完成优化SQL,选择是走索引还是全表 ...

  8. SQL 性能起飞了!

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 这篇文章总结了 52 条 SQL 性能优化技巧,用简洁明了的 ...

  9. Oracle查看SQL执行计划的方式

    Oracle查看SQL执行计划的方式 获取Oracle sql执行计划并查看执行计划,是掌握和判断数据库性能的基本技巧.下面案例介绍了多种查看sql执行计划的方式: 基本有以下几种方式: 1.通过sq ...

最新文章

  1. android用户引导页,android欢迎界面引导页
  2. Android Json解析方法
  3. javascript图片懒加载与预加载的分析
  4. 一个数里有那些约数用c++怎么做_两数的最大公约数你会求吗?(内附完整算法代码)...
  5. Undo TableSpace ①.管理方法
  6. python3-开发进阶-仿博客园项目setting.py的文件的配置,admin,forms(2)
  7. rac san+oracle_Oracle11g1+RAC+install+for+CentOS5(ASM+to+FC+SAN)_IT168文库
  8. c# hdf5 写string_Pandas系列之入门篇——HDF5
  9. [洛谷 P3992] [BJOI2017]开车
  10. 【jQuery笔记Part1】02-jQuery代码风格
  11. Java 1.1.3 修改字符串、不可变字符串
  12. 【原创翻译】深入理解javascript事件处理函数绑定三部曲(一)——早期的事件处理函数...
  13. undefined reference to 'modbus_new_tcp'
  14. ERP(企业资源计划)
  15. 小手的图标css,CSS中cursor属性给标签加上小手形状
  16. 彩钢板进行BS 476-3屋顶外露部分防火测试
  17. 根据银行卡号来获取银行名称-java
  18. [英语阅读]保时捷与大众共商合并大计
  19. Java面试题,208道
  20. spark master web ui 端口8080被占用解决方法

热门文章

  1. iceberg-flink 九:累积窗口按照天统计,数据不是从0:00-11:59 统计。
  2. 如何查看服务器协议端口,如何查看电脑服务器端口
  3. 拼多多进军教育,学习也能「砍一刀」?
  4. 运算放大器的环路补偿-关于并联的电阻电容的分析
  5. C#面向对象编程:构造函数
  6. 【C++】二分法查找某个数字在数组中的下标
  7. 蜻蜓FM语音下载(qingtingdown)
  8. Python 图_系列之纵横对比 Bellman-Ford 和 Dijkstra 最短路径算法
  9. SPA项目开发之CRUD+表单验证
  10. 【洛谷】P5149 会议座位