JDBC的事务控制

1.类ConnectionFactory

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class ConnectionFactory {
	public static   String url;
	public  static  String driver;
	static
	{
	    Properties pp = new Properties();
	    InputStream   inStream=Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties");
	  // InputStream   inStream=ConnectionFactory.class.getClassLoader().getResourceAsStream("config.properties");
	    //两种读入数据流的方式;
	    try {
			pp.load(inStream);
			url= pp.getProperty("url");
			driver =pp.getProperty("driver");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public static Connection getConnection()
	{
		Connection conn=null;
		try {
			Class.forName(driver);
			 conn= DriverManager.getConnection(url);
			 
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	 return conn;
	}
    public static void close(Connection conn,Statement st, ResultSet rs) throws SQLException
    {
        if(conn!=null) conn.close();
        if(st!=null) st.close();
        if(rs!=null)  rs.close();
    }
     public static void close(Connection conn,Statement st) throws SQLException
     {
    	 close(conn,st,null);
     }
}

2.主类

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

import zhangJDBC.ConnectionFactory;

public class Transatiob {
public static void main(String[] args) {
	/*
	 1.设置事务的提交方式:非自动提交
	 conn.setAutoCommit(false);
	 2.将需要添加的事务的代码放在try,catch中
	 try{
	 //需要添加事物的业务代码
	 }catch(Exception e)
	 {
	 }
	 
	 3.在try块中添加提交操作,表示操作无异常,提交事务
	 conn.commit();//正常流程,提交事务
	 
	 4.在catch块中添加回滚事务,表示操作出现异常,撤销事务
	 conn.rollback();
	 
	 5.设置事务提交的方式为自动提交
	 conn.setAutoCommit(true);
	 
	 在JDBC处理事务的过程中,也可以设置事物的回滚带你,当事务回滚的时候,回滚到保存点
	 
	 Savepoint savepoint = conn.setSacepoint();
	 roll.rollback(savepoint);
	 st.releaseSavepoint(savepoint);//记住释放save point
	  
	 */
	
	Connection conn=ConnectionFactory.getConnection();
	PreparedStatement pst = null;
	String sql="insert into stuinfo(name,content,image) values(?,null,null)";
	String sql1="delete from student where id=1";
	
	try {
		//设置是否自动提交事务为false
		conn.setAutoCommit(false);
		
		pst= conn.prepareStatement(sql);
		pst.setString(1, "测试事务");
		System.out.println("第一句语句执行。。。。。");
		pst.executeUpdate();
		
		pst= conn.prepareStatement(sql1);
		System.out.println("第二句语句执行。。。");
		pst.executeUpdate();
		//2.提交事务
		conn.commit();
		System.out.println("提交事务");
		
		
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		//如果出现异常则回滚事务
		try {
			conn.rollback();
			System.out.println("回退事务。。。");
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		e.printStackTrace();
	}finally{
		try {
			conn.setAutoCommit(true);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			ConnectionFactory.close(conn, pst);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值