JDBC中事务处理应用

 

解释事务的概念; 事务控制是sql语句中的核心之一;事务控制的作用就是保证数据的正常执行与异常之后可以恢复

 

事务常用命令:

            Commit提交

            rollback;回滚

           savepoint;保存点

 

例如在实际开发中我们会处理很多的数据,但是一旦提交数据将无法修改,这时会出现灾难性的事件;因此事务控制就显得格外的重要与特别

 

     a),rollback还原为厨师数据,将sal改成1200

update emp  set sal=1200 where ename='SMITH

     

    此时我发现不想改sal的数,如果没commit还可以还原

 rollback;

      rollback是每次都还原原始数据800

 

 

  b),savepoint保存点和commit的使用 

    1 ,将sal改为800

update emp  set sal=800 where ename='SMITH

    

   2 ,将sal改为500 并设置savepoint a1

update emp  set sal=800 where ename='SMITH

   

  3,将sal改为1500 并设置savepoint a2

update emp  set sal=800 where ename='SMITH

  

   4,还原a2

   rollback to a2;

 

 通过设置savepoint可以还原到我们需要的数据地点

 

事物;是为了保证对数据操作的一致性和统一性 
 commit;提交事物,将数据更新到数据库中去,一旦事物被提交就无法还原
 rollback 回滚  还原到上一次提交事物时的状态
 savepoint a1 创建一个还原点,a1是还原点的名称,rollback to a1;还原到a1的保存点
  
    一旦提交事物所有的保存点都失效
    在执行退出命令的时候会自动的先提交事物

     jdbc中一旦执行数据编译自动提交

 

 

 

JDBC中事务的应用;保证数据的一致性

 

  如下代码;没有加入事务的概念,数据会出错并且不能回复

 

package 数据库操作;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *  * @author Administrator
 */
public class OracleDemo {

	public static void main(String[] args)  {
		 Connection conn;
		try {
			//1.加载数据驱动
			Class.forName("oracle.jdbc.driver.OracleDriver");
		
			//2.定义字符串
			String url ="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
			
			//3,链接数据库
			 conn = DriverManager.getConnection(url, "scott", "tiger");
			
			//4,创建数据操作对象
			Statement stm = conn.createStatement();
		    //5,更新需要的数据
			String sql = "Update emp set sal = 800 where ename ='SMITH'";
			//两行错的
			String str = "abds";
			int len = Integer.parseInt(str);
			int num =stm.executeUpdate(sql);
			System.out.println(len);
		     System.out.println("有"+num+"行受影响");			
			}catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();				
	 }
	}
}

 

 //编译出错,但是sql语句已经执行,commit已经提交

 

 

 

 

 

怎么设置出错时commit不自动的提交

 

 

 

 

package 数据库操作;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * java连接JDBC的事物控制联系
 * @author Administrator
 *roolback  ,commit,savepoint  事物控制
 */
public class OracleDemo {

	public static void main(String[] args)  {
		 Connection conn;
		try {
			//1.加载数据驱动
			Class.forName("oracle.jdbc.driver.OracleDriver");
		
			//2.定义字符串
			String url ="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
			
			//3,链接数据库
			 conn = DriverManager.getConnection(url, "scott", "tiger");
			
			//4,创建数据操作对象
			Statement stm = conn.createStatement();
			
			try{
				//设置禁止自动提交
			conn.setAutoCommit(false);
			//5,更新需要的数据
			String sql = "Update emp set sal = 800 where ename ='SMITH'";
			String str = "abds";
			int len = Integer.parseInt(str);
			int num =stm.executeUpdate(sql);
			System.out.println(len);
			 System.out.println("有"+num+"行受影响");
			 //执行完毕后再提交
			 conn.commit();	
		} catch (Exception e) {
			 conn.rollback();
			 System.out.println("执行了回滚的操作...........");
			e.printStackTrace();				
	}
		}catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();				
	 }
	}
}

 

//输出结果;一行受影响

 

 

 

 

 

 

 

你可能感兴趣的:(java,JDBC编程,事务控制语句)