JDBC---使用Connection连接对象来管理事务

深入理解MyBatis——数据源和事务管理 在使用MyBatis是,我们需要配置数据源,常用的数据源有c3p0,dbcp,druid等。打开源码会发现,他们都实现了javax.sql.DataSource接口。 实质上,MyBatis中数据源可以分为三类,UNPOOLED、POOLED和JNDI类。使用UnpooledDataSource,PooledDataSource来分别表示前两种数据源,两者都实现了javax.sql.DataSo 阅读详情
JDBC 使用Connection连接对象来管理事务管理事务:
  • 事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤要么同时成功,要么同时失败。

  • 操作:

    1. 开启事务
    2. 提交事务
    3. 回滚事务
  • 使用Connection对象来管理事务

    • 开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务
      • 在执行sql之前开启事务
    • 提交事务:commit()
      • 当所有sql都执行完提交事务
    • 回滚事务:rollback()
      • 在catch中回滚事务
package thinking_in_java.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * @PackageName: thinking_in_java.jdbc
 * @ClassName: Transactional
 * @Author: 
 * @Date: 2020/9/28 10:41
 * @Description: //TODO
 */
public class Transactional {
	/**
	 * 事务操作
	 */
	public static void main(String[] args) {
		Connection conn = null;
		PreparedStatement pstmt1 = null;
		PreparedStatement pstmt2 = null;

		try {
			//1.获取连接
			conn = JDBCUtils.getConnection();
			//开启事务
			conn.setAutoCommit(false);
			//2.定义sql
			//2.1 张三 - 500
			String sql1 = "update account set balance = balance - ? where id = ?";
			//2.2 李四 + 500
			String sql2 = "update account set balance = balance + ? where id = ?";
			//3.获取执行sql对象
			pstmt1 = conn.prepareStatement(sql1);
			pstmt2 = conn.prepareStatement(sql2);
			//4. 设置参数
			pstmt1.setDouble(1, 500);
			pstmt1.setInt(2, 2);

			pstmt2.setDouble(1, 500);
			pstmt2.setInt(2, 3);
			//5.执行sql
			pstmt1.executeUpdate();
			// 手动制造异常
			//int i = 3/0;
			pstmt2.executeUpdate();
			//提交事务
			conn.commit();
		} catch (Exception e) {
			//事务回滚
			try {
				if (conn != null) {
					conn.rollback();
				}
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		} finally {
			JDBCUtils.close(pstmt1, conn);
			JDBCUtils.close(pstmt2, null);
		}
	}
}

package thinking_in_java.jdbc;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/**
 * @PackageName: thinking_in_java.jdbc
 * @ClassName: JDBCUtils
 * @Author: 
 * @Date: 2020/9/28 10:43
 * @Description: //TODO
 */
public class JDBCUtils {

	private static String url;
	private static String user;
	private static String password;
	private static String driver;

	static {
		Properties properties = new Properties();
		ClassLoader classLoader = JDBCUtils.class.getClassLoader();
		InputStream resourceAsStream = classLoader.getResourceAsStream("jdbc.properties");
		try {
			properties.load(resourceAsStream);
			url = properties.getProperty("url");
			user = properties.getProperty("user");
			password = properties.getProperty("password");
			driver = properties.getProperty("driver");
			Class.forName(driver);
		} catch (IOException | ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	public JDBCUtils() {
	}

	public static Connection getConnection() throws SQLException {
		return DriverManager.getConnection(url, user, password);
	}

	public static void close(Statement statement,Connection connection){
		close(null,statement,connection);
	}

	public static void close(ResultSet rs, Statement stmt, Connection conn) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		if (stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}
用LTspice仿真CMOS反相器功耗?这份避坑指南能省你3天调试时间 本文详细介绍了如何使用LTspice准确仿真CMOS反相器的功耗,包括动态功耗、短路功耗和静态功耗的测量技巧。通过工程实践指南,帮助电子工程师避开常见陷阱,优化仿真参数设置,提升仿真结果的可靠性,节省调试时间。 阅读详情

相关推荐

物理专业书库模板(1):物理学书单(适合物理专业本科生、研究生、科研工作者、物理爱好者...)

物理专业书库模板(1):物理学书单(适合物理专业本科生、研究生、科研工作者、物理爱好者...) 求赞求喜欢求分享,建议关注,防止文章丢失。

hepyang的博客 2181

MySQL之事务详解

一、用途 事务主要用于处理操作量大、复杂度高的数据 例如在人员管理系统中,要删除一个人员,你既要删除人员的基本资料,也要删除和该人员相关的信息,比如QQ号、微信号、邮箱、文章等,这些数据库操作语句就构成了一个事务 二、条件与级别 1.事务基本要素 原子性、一致性、隔离性、持久性 原子性 一个事务中的所有操作,要么全部完成,要么全部不完成 事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像事务从来没执行过一样 一致性 事务开始前和事务完成后,数据库完整性没有被破坏 写入的资料完全符合

zengxingyuluo的博客 993

Gromacs GPU加速版安装全攻略:从依赖配置到性能优化

本文提供了Gromacs GPU加速版的完整安装与性能优化指南。详细介绍了从编译器、OpenMPI、FFTW到CUDA等关键依赖的配置,手把手指导编译支持CUDA的Gromacs,并深入解析了如何通过调整.mdp参数及平衡MPI与OpenMP线程分配,最大化GPU利用率,从而让分子动力学模拟效率获得数十倍提升。

y9z0a1b的博客 1151

一个事务中 可以查询自己未提交的数据吗_浅析数据库事务隔离级别

数据库的事务隔离级别共分为4种,级别越高性能越差,合理的设置事务隔离级别才能保证数据正确的情况下性能最好。隔离级别没有合理的设置,会出现一些异常情况,比如脏读、不可重复读、幻读。根据自身的业务场景去分析是否允许这些异常情况的存在,设置合理的隔离级别一、概念介绍脏读在一个事务中读取到了其他事务未提交的数据,就是脏读。未提交就可能出现回滚,如果数据被回滚,那么该事务对回滚的数据进行操作必然会导致数据错...

weixin_39943926的博客 1141

《统计学习方法》——李航 学习大纲

最近在学习李航写的统计学习方法概论, 每一章都用xmind理清了思路,括号里是书里的公式,第一次写博文,敬请指教~~~~ 第一章 统计学习方法论 第二章 感知机 每个方法其实只需要着重掌握三要素和输入输出就可以了,主要看模型、策略和算法。 感知机主要是二类分类的线性分类模型。 看到后面会注意感知机和支持向量机的区别。 第三章 k近

wjy619251334的博客 1万+

数据产品需求文档(PRD)怎么写?阿里P8分享的模板+5个避坑点

作用:记录文档的版本、作者、评审信息,避免“文档混乱”。填写规范字段说明示例文档名称清晰反映产品名称,如“用户行为分析平台PRD”用户行为分析平台PRD_V1.0文档版本用“版本号+日期”,如V1.0_20240301编写人数据产品经理姓名+联系方式张三(138-XXXX-XXXX)评审人员业务负责人、开发经理、数据分析师、运维负责人李四(业务)、王五(开发)、赵六(数据)、周七(运维)评审时间评审日期2024-03-05评审意见。

架构师的AI之路,分享AI应用开发架构的学习与实践。 1575

同一个事务中未提交的数据查不到_四、mysql进阶篇:P62-66 事务

本部分主要讲解mysql数据库中的进阶知识和实际操作1:事务。2.事务的ACID一致性:类似银行转账,张三的钱转给李四,张三的钱要减少,李四的钱要增加;隔离性:张三给李四转钱,张三选好数额,还没点提交,李四应该查不到收到钱了;持久性:张三给李四转钱,一旦转账成功,就拿不回来了,只能找银行处理;确认这件事发生了,就存在磁盘里面了;二、事务的使用2.1 概念mysql默认事务是开启的,一条SQL语句一...

weixin_39883705的博客 797

FPGA 学习系列(2):Verilog 语法基础

Verilog 由门级建模数据流建模行为建模门级建模(Gate Level Modeling):使用基本逻辑门描述电路,接近硬件物理结构。数据流建模(Data Flow Modeling):使用assign语句进行组合逻辑建模,类似数学方程式。行为建模(Behavioral Modeling):使用always代码块和if-elsecase等控制语句建模,抽象程度较高。Verilog 代码一般由模块(module)组成,每个模块描述一个独立的硬件功能。

Azperk的博客 989

jdbc连接oracle的多种方式

jdbc使用TNSName连接时,java启动程序JVM参数新增(oracle.net.tns_admin指的是tnsnames.ora文件目录)tnsnames.ora文件配置TSNName连接信息。

邓霖涛的博客 9077

AI Agent开发第49课-DIFY让AI自动预约排班后发企业微信通知-MongoDb-Redis-企业微信调用

我们的Dify会讲得很透彻,坚持喂饭级教程,从一个基本的AI自动预约客户到自动记录客户的信息再到自动判断下一步如何走全部是AI化的,这是一个真正的AI原生应用,它来自于我的一个大型物业公司用AI自动预约系统中的一部分。我们会使用这个预约流做完整的Dify例子来讲完,因为它太有代表性了。工作流中的控制反转、AI决策下一步怎么走、人为干涉、用户行为判断、外部中间件如Redis,今天我们就要讲到在Dify中调用MongoDB的数据以及企业微信通知来作为预约派单的最后一步了。

打造全国最全的AI Agent开发知识领域的博客 1755

手把手教你学simulink实例--Simulink在电动汽车故障诊断与预测中的应用仿真

通过上述步骤,我们成功实现了基于Simulink的电动汽车故障诊断与预测仿真。该系统能够全面评估故障诊断与预测算法的性能,验证其在不同故障场景下的有效性,并通过优化设计提高系统的可靠性和安全性。引入智能算法:结合人工智能技术,实现更智能的故障诊断与预测。扩展功能:增加对多种车型和故障类型的支持,提升系统通用性。实验验证:将仿真模型应用于实际硬件,进行实验验证,评估其在实际工况下的表现。

MHD0815的博客 256

Error:NoSuchMethodError: org.springframework.jdbc.datasource.DataSourceUtils.isConnectionTransaction

问题描述: mybatis+spring 执行报错NoSuchMethodError: org.springframework.jdbc.datasource.DataSourceUtils.isConnectionTransactional 分析: connection是否为事务性。 DataSourceUtils.isConnectionTransactional Det

学习笔记 5238

通过情感分类实例 详细介绍如果借助Huggingface平台 完成Transformers模型运行(包括配置环境-tokenizer-Model-输出头-预测)

attention_mask和padding是配套使用的,当人为去修改padding的时候,也要把attention_mask里面的参数进行修改。下载Huggingface包,Huggingface可以说是一个社区,集成了很多nlp的模型、数据集、预训练权重文件等等,并且免费,只需要pip install下载即可。那么用什么做分类就选择什么输出头,就import什么东西。代码中使用了自动分词器选择,它是由checkpoint指定的预训练模型关联的,不用我们自己选择tokenizer,它自动帮我们选择好了。

LZL2020LZL的博客 1137

JDBC | 使用Connection对象管理事务及两种常见数据库连接池c3p0和Druid的使用

目录 1. 事务 1)操作步骤: 2)使用Connection对象管理事务 2. 数据库连接池 概念: 好处: 实现: 3. 使用数据库连接池c3p0 使用c3p0步骤: 4. 了解数据库连接池Druid 使用Druid步骤: 5.简单了解JDBCTemplate 1)什么是JDBCTemplate? 2)步骤: 1. 事务 1)操作步骤: ...

是袁同学呀 863

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JDBC的Connection对象

通过Connection对象的createStatement()方法,我们可以获取一个普通的Statement对象,用于执行静态的SQL语句。而通过Connection对象的prepareStatement()方法,我们可以获取一个预编译的PreparedStatement对象,它接受输入参数并执行预编译的SQL语句,通常具有更好的性能。它代表了Java应用程序与特定数据库之间的连接会话,通过这个会话,应用程序可以执行SQL语句,并获取这些语句的增删查改结果。

fishlovejavaa的博客 513

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【JDBC】JDBC API 详解 ② ( Connection 数据库连接对象 | 获取 SQL 执行对象 - 普通、预编译 SQL 语句 | 事务管理 | 开启事物 | 提交事物 | 回滚事物 )

一、Connection 数据库连接对象 1、获取 SQL 执行对象 2、事务管理 3、事务管理代码示例

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1026

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JDBC事务的执行步骤

在使用JDBC访问数据库时,首先建立对数据库的连接,创建一个Connection对象。在默认情况下,事务是自动提交的,因此要使用事务时,要先取消Connection的自动提交方式。如果执行发生异常,就回滚事务。操作完成后,提交事务就可以了。...

111会飞的鱼的博客 6049

Connection 对象简介 方法解读 JDBC简介(四)

Connection 对象简介 方法解读 JDBC简介(四) 通过驱动管理器DriverManager的getConnection方法,可以创建到指定URL的连接 Connection conn = DriverManager.getConnection(url, user, password); 看得出来,在JDBC中连接被...

noteless的博客 3627

【Java 进阶篇】JDBC Connection详解:连接到数据库的关键

Connection是JDBC中的一个接口,它代表着与数据库的物理连接。它允许您与数据库建立通信,发送SQL语句,并获取查询结果。连接到数据库是执行各种数据库操作的第一步,因此了解如何创建和使用Connection对象非常重要。Connection对象是JDBC中连接数据库的关键。通过了解如何创建、关闭连接,以及如何使用连接池,您可以更好地管理数据库连接,提高应用程序的性能和可维护性。同时,良好的异常处理和事务管理也是编写健壮数据库应用的重要因素。

繁依Fanyi的博客 9586

抛去各种框架,最基本的JDBC连接不能忘(JDBC连接知识集锦)

目录    一、 JDBC基本概念  * 概念: * JDBC本质:  二、 快速入门:  * 步骤:    三、 详解各个对象:         1. DriverManager:驱动管理对象         2. Connection:数据库连接对象         3. Statement:执行sql的对象          4. ResultSet:结果集对象,封装查询...

qq_35499112的博客 172

JDBC

JDBC 概念 Java DataBase Connectivity Java数据库连接,Java语言操作数据库 JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。 快速入门: 步骤: 1.导入驱动j...

柯基和你的博客 161

JDBC -API 详解-Connection

Connection是 JDBC(Java Database Connectivity)中用于表示数据库连接的核心接口,负责管理与数据库的会话。

2401_83708850的博客 416

JDBC API Connection详解

理解 Connection 的用法是掌握 JDBC 的关键,实际开发中通常结合连接池使用,而非直接通过 DriverManager 创建。

qq_74798973的博客 434

ESP32 ModbusTCP分片缓存:解决TCP分段与粘包拆包问题

在TCP网络通信中,数据以字节流形式传输,应用层报文可能被协议栈拆分成多个分段(TCP分段)抵达接收端,也可能多个应用帧合并后到达(粘包)。这种不确定性在Wi-Fi环境下尤为突出,导致基于固定长度读取的解析代码频繁出现丢帧、错位问题。ModbusTCP作为工业设备数据采集的常见协议,其报文通常不超过260字节,但同样受限于TCP流的动态边界。环形缓冲区以固定内存开销实现字节流的暂存与顺序重组,结合ModbusTCP帧头Length字段精确判定帧边界,可高效完成从分段数据到完整报文的恢复。该方案资源占用极低,

weixin_33787529的博客 547

mysql的connection对象_Connection 对象简介 方法解读 JDBC简介(四)

通过驱动管理器DriverManager的getConnection方法,可以创建到指定URL的连接Connection conn = DriverManager.getConnection(url, user, password);看得出来,在JDBC中连接被抽象为Connection表示:与特定数据库的连接(会话)在连接上下文中执行 SQL 语句并返回结果方法梗概对于应用程序开发者来说,连接C...

weixin_42498909的博客 1718

JDBC入门(基本步骤、功能对象、工具类、事务)

(一) JDBC概念: Java DataBase Connectivity Java 数据库连接, Java语言操作数据库JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。 (二)JDBC实现步骤以及其中涉及的各个对象 1.基本实...

weixin_45575129的博客 270
上一篇: JDBC:java语言操作数据库
下一篇: 面向对象的理解及三大特征(封装、继承、多态)
changleeei
博客等级 码龄7年 6粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值