5.事物

一.事务

事务就是一个操作,在操作中包含多步,事务能保证多步操作要么都执行,要么都不执行
mysql数据库中,默认认为每一条 insert或update 或delete语句都是一个事务,默认的事务无法“撤销” 、无法回滚

关键语句:

  • 1.con.setAutoCommit(false);设置不默认提交事物
  • 2.con.commit();程序最后再提交事物

事物的特点:(事务中的语句一定是增删改语句)

  • 1、原子性:事务中的语句是最小单位,不能再分割
  • 2、隔离性:事务和事务之间是隔离的,没有任何关系
  • 3、一致性:事务中的若干条语句,要么都执行,要么都不执行
  • 4、永久性:事务一旦提交后,将无法回滚。

案例:

银行的转账业务

包括两步操作

  • 账户1update account set balance=balance-500 where id="1"
  • 账户2update account set balance=balance+500 where id="2"

代码:

package cn.jdbc.text;

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

/**
 * @author CC
 * 事物
 * 只能是增,删,改语句
 */
public class ThingsTest {

	public static void main(String[] args) {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		Connection con = null;
		PreparedStatement pstm = null;
		try {
			con = DriverManager.getConnection("jdbc:mysql://localhost:3306/day7","root","cuichen975541045");
			con.setAutoCommit(false);
			//账号减少
			String sql = "update bankaccount set balance=balance-500 where id='1001'";
			pstm = con.prepareStatement(sql);
			pstm.executeUpdate();
			//账户增加
			String sql2 = "update bankaccount set balance = balance+500 where id='1002'";
			pstm = con.prepareStatement(sql2);
			pstm.executeUpdate();
			con.commit();
		} catch (SQLException e) {
			e.printStackTrace();
			try {
				con.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			System.out.println("提交失败");
		}
	}

}


二.批量操作数据( 一次执行多条 insert update delete 语句)

关键语句:

  • pstm.addBatch();增加批次
  • pstm.executeBatch();执行批次代码
  • pstm.clearBatch();清除批次

代码:

package cn.jdbc.text;

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

/**
 * @author CC
 * 批处理
 */
public class BatchAdd {

	public static void main(String[] args) {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		Connection con = null;
		PreparedStatement pstm = null;
		try {
			con = DriverManager.getConnection("jdbc:mysql://localhost:3306/day7","root","cuichen975541045");
			String sql = "insert into batchadd(name,mark) values(?,?)";
			pstm = con.prepareStatement(sql);
			//批量插入
			for (int i = 1; i <= 50000; i++) {
				pstm.setString(1, "第"+i);
				pstm.setString(2, "注释"+i);
				//增加批次
				pstm.addBatch();
				if (i%100 == 0) {
					pstm.executeBatch();
					pstm.clearBatch();
				}
			}
			//执行批次代码
			pstm.executeBatch();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值