事务基本概念
-一组要么同时执行成功,要么同时执行失败的SQL语句。是数据库操作的一个执行单元!
一事务开始于:
·连接到数据库上,并执行一条DML语句(INSERT、 UPDATE或DELETE).·前一个事务结束后,又输入了另外一条DML语句。
-事务结束于:
·执行COMMIT或ROLLBACK语句。
·执行一条DDL语句,例如CREATE TABLE语句;在这种情况下,会自动热行COMMIT语句。
·执行一条DCL语句,例按如GRANT语句;在这种情况下,会自动执行COMMIT语句。
·断开与数据库的连接。
·执行了一条DML语句,该语句却失败了;在这种情况中,会为这个无效的DML语句执行ROLLBACK语句
·事务的四大特点(ACID )
- atomicity(原子性)
·表示一个事务内的所有操作是一个整体,要么全部成功,要么全失败; - consistency (一致性)
·表示一个事务内有一食操作失败时,所有的更改过的数据都必须回滚到修改前的状态; - isolation(隔离性)
事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。 - durability(持久性)
·持久性事务完成之后,它对于系统的影响是永久性的。
package com.lzy.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Demo04 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps1 = null;
PreparedStatement ps2 = null;
try {
// 加载驱动类
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc", "root", "123456");
conn.setAutoCommit(false);
ps1=conn.prepareStatement("insert into t_user(username,pwd)values(?,?)");
ps1.setObject(1, "lzy");
ps1.setObject(2, "123456");
ps1.execute();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ps2=conn.prepareStatement("insert into t_user (username,pwd) values (?,?,?)");
ps2.setObject(1, "lzy2");
ps2.setObject(2, "123456");
ps2.execute();
conn.commit();//手动提交事务
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
try {
conn.rollback();
System.out.println("回滚事务");
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
如果要进行回滚事务(rollback()),一定要改为手动提交事务
conn.setAutoCommit(false);//手动提交事务
ps2=conn.prepareStatement("insert into t_user (username,pwd) values (?,?,?)");
ps2.setObject(1, "lzy2");
ps2.setObject(2, "123456");
ps2.execute();
该代码中插入语句有三个占位符,而我只设置了两个内容,所以会报错,使用了回滚事务后,第一条插入的lzy1也会失败,也就是说数据库没有发生变化,也就符合事务的基本概念:一组要么同时执行成功,要么同时执行失败的SQL语句。是数据库操作的一个执行单元!
本文介绍了数据库事务的概念及其四大特性(ACID):原子性、一致性、隔离性和持久性。通过示例代码展示了如何在Java中使用JDBC手动管理事务,确保数据操作的完整性和一致性。
739

被折叠的 条评论
为什么被折叠?



