那么我们都是通过程序操作数据库。所以要了解jdbc下怎样对事务操作。jdbc如何操作事务?

自动事务false那就不开了呗相当于开启事务。


package cn.itcast.transaction;import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;import cn.itcast.utils.JdbcUtils;
//代码加上事务了加上回滚了加上提交了//jdbc中事务操作
public class TransactionTest1 {public static void main(String[] args) throws SQLException {//修改id=2这个人的money=500;
String sql = "update account set money=500 where id=2";
Connection con = JdbcUtils.getConnection();con.setAutoCommit(false);//开启事务,相当于start transaction;

Statement st = con.createStatement();
st.executeUpdate(sql);//事务回滚
//con.rollback();

con.commit();//事务提交
st.close();
con.close();
}
}

package cn.itcast.transaction;import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;import cn.itcast.utils.JdbcUtils;
//代码加上事务了加上回滚了加上提交了//jdbc中事务操作
public class TransactionTest2 {public static void main(String[] args) {//修改id=2这个人的money=500;
String sql = "update account set money=500 where id=2";//事务操作的异常不能说想抛就抛
Connection con = null;
Statement st  = null;try {//如果数据库操作过程中捕获异常了,con = JdbcUtils.getConnection();con.setAutoCommit(false);//开启事务,相当于start transaction;st = con.createStatement();st.executeUpdate(sql);
} catch (SQLException e) {e.printStackTrace();//事务回滚 有异常就把事务回滚,有异常就说明出问题了//出问题就把数据恢复到原始,那就回滚吧try {con.rollback();} catch (SQLException e1) {e1.printStackTrace();}
}finally{//finally里面的内容肯定是能执行到的try {con.commit();//事务提交st.close();//资源关闭  释放资源操作  con.close();//资源关闭 } catch (SQLException e) {e.printStackTrace();}}}
}

package cn.itcast.utils;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;public class JdbcUtils {private static final String DRIVERCLASS;private static final String URL;private static final String USERNAME;private static final String PASSWORD;private static final ThreadLocal<Connection> tl = new ThreadLocal<Connection>();static {DRIVERCLASS = ResourceBundle.getBundle("jdbc").getString("driverClass");URL = ResourceBundle.getBundle("jdbc").getString("url");USERNAME = ResourceBundle.getBundle("jdbc").getString("username");PASSWORD = ResourceBundle.getBundle("jdbc").getString("password");}static {try {// 将加载驱动操作,放置在静态代码块中.这样就保证了只加载一次.
            Class.forName(DRIVERCLASS);} catch (ClassNotFoundException e) {e.printStackTrace();}}public static Connection getConnection() throws SQLException {Connection con = tl.get();// 从ThreadLocal中获取Connection。第一次获取得到的是null.if (con == null) {// 2.获取连接con = DriverManager.getConnection(URL, USERNAME, PASSWORD);tl.set(con); // 将con装入到ThreadLocal中。
        }// tl.remove(); //解除return con;}// 关闭操作public static void closeConnection(Connection con) throws SQLException {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();}}
}

转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/6623289.html

day18-事务与连接池 3.jdbc中事务操作介绍相关推荐

  1. 【JDBC知识总结】---JDBC连接数据库、连接池、JDBC在框架中的使用等

    一.JDBC的基本操作 1.1 JDBC的概述 什么是JDBC JDBC(Java Date Base Connectivity , Java数据库连接) 是一种用于执行SQL语句的Java API, ...

  2. java手动提交事务_Mybatis是如何将事务和连接池高效的结合的

    1.说到数据库事务,人们脑海里自然不自然的就会浮现出事务的四大特性.四大隔离级别.七大传播特性. 四大还好说,问题是七大传播特性是哪儿来的?是Spring在当前线程内,处理多个数据库操作方法事务时所做 ...

  3. 连接池在java中的使用

    1. 在项目的实际开发中,连接数据库一般都会使用两种方式. (1) 使用JDBC直接连接数据库,其他程序每访问一次数据库,访问程序直接跟数据库打交道,建立一次数据库连接,用完在释放连接资源. (2) ...

  4. JDBC中事务、批量操作、大数据类型、获取自动生成的主键、等用法

    1 事务的用法 事务的ACID属性: 通俗的说事务:指一组操作,要么都成功执行,要么都不执行-->原子性在所有的操作没有执行完毕之前,其他会话不能够看到中间改变的过程-->隔离性事务发生前 ...

  5. 关于连接池、JDBC、DBUtils的一些知识

    对于连接池.JDBC.DBUtils的一些知识点归纳

  6. mysql连接池永驻_【学习笔记】Oracle连接池 数据库常驻连接池(Database Resident Connection Pool)案例介绍...

    天萃荷净 分享一篇关于应用程序与Oracle数据库连接的连接方法介绍,数据库常驻连接池(Database Resident Connection Pool)案例介绍 一.介绍常驻连接池(Databas ...

  7. 【数据库1】mysql,DDL/DML,DQL,外键约束,多表/子查询,事务,登陆,连接池,jdbc,redis,crontab,ftp,oracle,数据交换/存储/收集

    文章目录 1.mysql安装:存储:集合(内存:临时),IO流(硬盘:持久化) 1.1 服务端:双击mysql-installer-community-5.6.22.0.msi 1.2 客户端:命令行 ...

  8. JDBC从入门到熟练使用——功能类详解、增删改查(CRUD)、sql注入、事务、连接池

    一.JDBC入门 1.jdbc的概念 JDBC(Java DataBase Connectivity:java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问 ...

  9. 【node】express中mysql的基本用法、连接池的使用、事务的回滚

    [node]express中mysql的基本用法.连接池的使用 安装mysql包 mysql的配置信息 mysql基本操作 查询mysql并渲染数据 mysql插入操作 首先在html页面写上< ...

最新文章

  1. Vmware ESXi 应用之还原备份的虚拟机
  2. LiveVideoStackCon 2018日程(草稿)发布
  3. 知识表示学习神器OpenKE:快速获取KG表示
  4. VTK:图片之ImageLuminance
  5. php显示无法找到该网页,window_Win8系统IE浏览器提示无法找到该网页的解决方法,  我们在浏览网页的时候, - phpStudy...
  6. 删除文件时,提示没权限删除文件怎么办
  7. 如何在 Mac 上的“快速查看”中查看和编辑文件
  8. Python-Matplotlib可视化(5)——添加自定义形状绘制复杂图形
  9. 关于解决Windows server系统用户无法远程的问题
  10. NYOJ - 整数划分(四)
  11. 依赖注入原理,作用,注入方式——Spring IOC/DI(二)
  12. ListView优化方案及其原理
  13. Redis基础篇(一)
  14. 详解散度、旋度(二维、三维)
  15. 《王二丫的甜品店》技术支持网址
  16. 通过fileProvider接收外部App传递文件路径的一些坑
  17. 阿里技术专家甘盘:浅谈双十一背后的支付宝LDC架构和其CAP分析(含phil补充)
  18. ESP32 TM1637显示4位数码管
  19. 5、SpringMVC自动配置概览
  20. 初涉莫比乌斯反演(附带例题)

热门文章

  1. Java Iterator 接口简介和简单用法.
  2. 【转】 ubuntu adduser 命令学习
  3. 【转】Linux查看文件编码格式及文件编码转换
  4. github 公钥 私钥_GitGithub入门教程笔记(2)
  5. 如何捕获window.print点击打印或取消_视频:手把手教您如何优化喷墨波形
  6. 枚举法用于逻辑问题的处理
  7. php lodop 实例,Vue使用lodop实现打印小结
  8. android 加壳 方案,android加壳思路
  9. 【技术】TCP 的固定窗口和滑动窗口
  10. seata-golang 接入指南