当前位置:Gxlcms > 数据库问题 > JDBC编程的事务处理

JDBC编程的事务处理

时间:2021-07-01 10:21:17 帮助过:24人阅读


    原子性是指事务中包含的操作都被看作是一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。这也意味着事务中的所有元素作为一个整体提交或回滚。事务的所有元素是不可分割的,是一个完整的操作。

    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();
			}
		}
	}
	
	
}












JDBC编程的事务处理

标签:jdbc编程的事务处理

人气教程排行