my Eclipse
什么是事务?保证数据库中数据交易的准确性 JDBC支持数据库中的事务:(mysql中只有Innodb和bdb两种存储引擎支持事务 其它存储引擎不支持事务) Mysql数据库创建库的时候,默认的存储引擎是innodb 事务的四大特性:ACID 1.原子性:保证数据修改的时候,要么全部成功,要么全部失败。 2.永久性:数据的修改,对系统的影响是永久性的。 3.一致性:事务完成时,必须保证数据的一致。 4.隔离性:并发事务修改数据时,不能与其他事务一起执行,保证数据修改的准确性
JDBC连接数据库,事务的提交方式默认为自动提交,在实际开发过程中大都使用 手动提交,则需要更改其提交方式:怎么更改? 通过JDBC核心API库中的Connection接口的setAutoCommit()设置,将参数改为false 即可,默认为true。 提交事务的方法: Connection.commit(); 回滚事务:Connection.rollback();当提交事务之后,若事务在执行过程中出现异常, 则将修改的数据恢复到修改之前的状态。保证数据交易的准确性。
try{//1.定义用在事务中执行的SQL语句String sql1= ''update account set amount= amount-'' +amount+''where id=' ''+from+'' ' '':String sq12=''update account set amount= amount+''+amount+''where id = ' '' + to +'' ' '';auto.Commit = con.getAutoCommit(); //2.获得自动提交状态
package com.auto.java;import java.sql.Connection;import java.sql.SQLException;import java.sql.Statement;public class Account1 { public static void Count(int from,int to , int monery){
Connection con=null; try { //数据库连接 con=DBUtil.getConnection(); //事务转账 String sql1='Update a set account-'+monery+' where id=''+from+'''; String sql2='Update a set account-'+monery+' where id=''+to+'''; Statement stmt=con.createStatement(); //事务提交方式改为手动 con.setAutoCommit(false); stmt.executeUpdate(sql1); stmt.executeUpdate(sql2); con.commit(); con.setAutoCommit(true); } catch (SQLException e) { try { con.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }}
备注:JDBC只是支持事务,其实运行原理还是数据库中的事务概念