JDBC编程的事务处理
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,一、事务的基本概念数据库是一个多用户使用的共享资源。当多个用户并发地存取数据的时候,在数据库中就会产生多个用户同时存取同一数据的情况。若对并发操作不加控制,就可能会产生读取和存储不正确的数据,破坏数据
千家信息网最后更新 2025年01月23日JDBC编程的事务处理
一、事务的基本概念
数据库是一个多用户使用的共享资源。当多个用户并发地存取数据的时候,在数据库中就会产生多个用户同时存取同一数据的情况。若对并发操作不加控制,就可能会产生读取和存储不正确的数据,破坏数据的一致性。
而事务是并发控制的基本单位。所谓事务,即一个操作序列。这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。比如银行转账工作:从一个账户扣款,并使用另一个账户收款,这两个操作要么都执行,要么都不执行,因此应该把它们看作是一个事务。
事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据的一致性。
对于编程人员来说,可以把数据库事务看作是一组sql语句,这组sql语句是一个逻辑工作单元,它们是不可分割的,它们的执行结果应该作为一个整体永久修改一个数据库的内容或者作为一个整体取消对数据库的修改。
二、事务的四个基本特征
1.原子性
原子性是指事务中包含的操作都被看作是一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。这也意味着事务中的所有元素作为一个整体提交或回滚。事务的所有元素是不可分割的,是一个完整的操作。
2.一致性
一致性是指事务开始之前和事务结束以后数据库都处于一致性状态,数据库的完整性约束没有被破坏。
3.隔离性
隔离性是指对数据库进行修改的多个事务是彼此隔离的。这说明事务必须是独立的,不应该以任何形式影响其他事务
4.持久性
持久性是指事务完成之后对于数据库的影响是永久的,该修改真实地修改了数据库,即使数据库出现故障也会一直保留。
三、与SQL相关的事务语句
开始事务:BEGIN TRANSACTION
提交事务:COMMIT TRANSATION
回滚事务:ROLLBACK TRANSATION
package com.eduask.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;/*将要测试的逻辑 保存一个用户Tom的基本信息和Tom的地址信息 分别通过两个java方法插入到用户表和地址表中 在插入地址表的时候人为造成一个异常 观察结果 */public class TransactionTest { //创建一个getConnection()用来获取数据库的连接 public static Connection getConnection(){ Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdemo","root","root"); } catch (Exception e) { e.printStackTrace(); } return conn; } public static void insertUserData(Connection conn) throws SQLException{ String sql = "insert into tbl_user(id,name,password,email) " + "values(10,'Tom','123456','tom@gmail.com')"; Statement st = conn.createStatement(); int count = st.executeUpdate(sql); System.out.println("向用户插入了 "+ count + " 条记录"); } public static void insertAddressData(Connection conn) throws SQLException{ String sql = "insert into tbl_address(id,city,country,user_id) " + "values(1,'ShangHai','China','10')"; Statement st = conn.createStatement(); int count = st.executeUpdate(sql); System.out.println("向地址表中插入了 "+ count + " 条记录"); } public static void main(String[] args) { Connection conn = null; try { conn = getConnection(); conn.setAutoCommit(false); insertUserData(conn); insertAddressData(conn); conn.commit(); } catch (SQLException e) { System.out.println("=========捕获到SQL异常========="); e.printStackTrace(); try { conn.rollback();//回滚事务,保证数据库数据的一致性 System.out.println("=========事务回滚成功========="); } catch (Exception e2) { e2.printStackTrace(); } }finally{ try { if (conn != null) { conn.close(); } } catch (Exception e3) { e3.printStackTrace(); } } } }
事务
数据
数据库
一致
一致性
用户
要么
地址
逻辑
不可分割
单位
单元
多个
整体
语句
工作
隔离
成功
两个
信息
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
公众号的数据库怎么建
软件开发进度计划承诺
写字楼网络技术
三星2016导出数据库
云网互联网科技
软件开发工程师需要精通什么
提高防范意识维护网络安全
广西软件开发外包哪家好
软件开发测试流程图
公安部要求网络安全管理系统
联想p320服务器机箱内
南京网络技术创新服务
删除数据库的操作步骤
公安网络安全标准
延边java软件开发招聘
在软件开发中js是什么意思
网络安全员培训 考核制度
基于服务器的车间管理
易唯软件开发
plsql 备份数据库
网络安全南威软件
redis数据库账号
华易网络技术有限公司
华为旧手机改私人服务器
网络技术人才市场需求分析
平度直播软件开发解决方案
消息软件的数据库
otis软件开发
麒麟数据库和mysql数据库
易唯软件开发