事务

 事务的特性

 1.原子性(Atomicity):事务是应用中最小的执行单位,事务是应用中不可再分的最小逻辑执行体

 2.一致性(Consistency):事务执行的结果,必须使数据库从一个一致性状态, 变到另一个一致性状态.当数据库只包含事务成功提交的结果时,数据库处于一致性状态

 3.隔离性(Isolation):各个事务的执行互不干扰,任意一个事务的内部操作对其他并发的事务都是隔离的.

 4.持续性(Durability):持续性也称为持久性(Persistence)指事务一旦提交,对数据所做的任何改变都要记录到永久储存器中,通常就是保存进物理数据库.

public class TransactionDemo {

public static void main(String[] args) throws ClassNotFoundException {

// 第一步 加载驱动

Class.forName("com.mysql.cj.jdbc.Driver");

 

// 第二步 获取数据库连接

// 连接字符串

String url = "jdbc:mysql://localhost:3306/demo_db_2021?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false";

 

// 用户名 密码

String userName = "root";

String password = "root";

 

Connection conn = null;

PreparedStatement ps = null;

try {

conn = DriverManager.getConnection(url, userName, password);

 

//事务第一步"开启事务" 关闭 jdbc 的自动提交

conn.setAutoCommit(false);

// 第三步 创建Statement

// prepareStatement 中使用?作为变量的占位符

String strSql = "UPDATE sys_user SET user_name=?,real_name=?,age=? WHERE id=?";

ps = conn.prepareStatement(strSql);

 

// 第四步 参数赋值

Date date = new Date();

ps.setString(1, "xjy");

ps.setString(2, "you修改");

ps.setInt(3, 21);

ps.setInt(4, 8);

 

// 第五步 执行sql

int rows = ps.executeUpdate();// 返回受影响的行数

if (rows == 1) {

System.out.println("第一次修改成功");

} else {

System.out.println("第一次修改失败");

}

int a=0;

int b=1/a;

    strSql = "UPDATE sys_user SET user_name=?,real_name=?,age=? WHERE id=?";

ps = conn.prepareStatement(strSql);

 

// 第四步 参数赋值

 

ps.setString(1, "xjy");

ps.setString(2, "lajiyou事务");

ps.setInt(3, 21);

ps.setInt(4, 8);

 

// 第五步 执行sql

    rows = ps.executeUpdate();// 返回受影响的行数

if (rows == 1) {

System.out.println("第二次修改成功");

} else {

System.out.println("第二次修改失败");

}

//事务执行完成后需要   手动提交

conn.commit();

} catch (SQLException e) {

if (conn!=null) {

try {

conn.rollback();

} catch (SQLException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

// TODO: Auto-generated catch block

e.printStackTrace();

} finally {

if (conn != null) {

// 记住一定要关闭数据库连接

try {

conn.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

if (ps != null) {

try {

ps.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

 

}

 

}

 

当事务中的代码运行报错时那么整个事务里的代码就不会执行成功.它只有整个事务里的代码全部运行成功才会改变数据.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值