sql练习 使用储存池
分别使用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练习 使用储存池相关推荐
- 黑群晖二合一已损毁_搬运 如何在黑群晖中重置损毁的储存池/储存空间
本帖最后由 ieweix 于 2020-11-23 22:05 编辑 如何在黑群晖中重置损毁的储存池/储存空间 萌新请不要看这个教程! 这个教程合适对linux有一定基础的用户 使用本方法前,请备份E ...
- cinder配置多ceph储存池[Ceph and Cinder multi-backend]
2019独角兽企业重金招聘Python工程师标准>>> I. Ceph 要配置Ceph以使用不同的存储设备,请参阅: Ceph 2 speed storage with CRUSH. ...
- 1433恢复储存,sql service恢复储存
第一步执行:[color=darkred]EXEC sp_addextendedproc xp_cmdshell,@dllname ='xplog70.dll'declare @o int [/col ...
- SQL SERVER 数据库储存的值里面前后有空格,有可能是全角或者半角空格,如何在查询中处理
例如 用户表里面的 UserCode 有空格,那么如何查询出来对应的用户 表名 tblUser 字段 UserCode 表记录为3条 ' admin','bbbadmin','abc' 如果用 ...
- Node.js SQL数据库操作 (上)(操作MySQL数据库及 数据库连接池)
文章目录 Node.js MySQL驱动 操作 MySQL 数据库 连接 MySQL 数据库 增删改查操作 防止 SQL 注入攻击 数据库连接池操作 Node.js MySQL驱动 Node.js的原 ...
- 精华贴子整理之SQL性能优化2
五种提高 SQL 性能的方法 发布日期: 4/1/2004 | 更新日期: 4/1/2004 Johnny Papa Data Points Archive 有时, 为了让应用程序运行得更快,所做的全 ...
- 经验整理-1-mysqlf索引、sql调优大全、底层结构、SQL分布式事物锁大全总结--100-@
-----mysql数据结构 MYSQL调优---- ?如何优化数据库性能或MYSQL调优?,工作中你是怎么做的(自述)? (前提---SQL的查询优化器--分析并完成优化SQL,选择是走索引还是全表 ...
- SQL 性能起飞了!
点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 这篇文章总结了 52 条 SQL 性能优化技巧,用简洁明了的 ...
- Oracle查看SQL执行计划的方式
Oracle查看SQL执行计划的方式 获取Oracle sql执行计划并查看执行计划,是掌握和判断数据库性能的基本技巧.下面案例介绍了多种查看sql执行计划的方式: 基本有以下几种方式: 1.通过sq ...
最新文章
- android用户引导页,android欢迎界面引导页
- Android Json解析方法
- javascript图片懒加载与预加载的分析
- 一个数里有那些约数用c++怎么做_两数的最大公约数你会求吗?(内附完整算法代码)...
- Undo TableSpace ①.管理方法
- python3-开发进阶-仿博客园项目setting.py的文件的配置,admin,forms(2)
- rac san+oracle_Oracle11g1+RAC+install+for+CentOS5(ASM+to+FC+SAN)_IT168文库
- c# hdf5 写string_Pandas系列之入门篇——HDF5
- [洛谷 P3992] [BJOI2017]开车
- 【jQuery笔记Part1】02-jQuery代码风格
- Java 1.1.3 修改字符串、不可变字符串
- 【原创翻译】深入理解javascript事件处理函数绑定三部曲(一)——早期的事件处理函数...
- undefined reference to 'modbus_new_tcp'
- ERP(企业资源计划)
- 小手的图标css,CSS中cursor属性给标签加上小手形状
- 彩钢板进行BS 476-3屋顶外露部分防火测试
- 根据银行卡号来获取银行名称-java
- [英语阅读]保时捷与大众共商合并大计
- Java面试题,208道
- spark master web ui 端口8080被占用解决方法