欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JDBC中事务处理应用

程序员文章站 2022-07-12 12:36:25
...

 

解释事务的概念; 事务控制是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();				
	 }
	}
}

 

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