事务的学习,从jdbc开始:jdbc对事务的支持与实现
在使用spring对项目进行开发时,所有的事务都是由spring来管理的。这样一来我们就可以不需要操心事务,可以专心的处理业务代码。
但是,事务的底层究竟是如何实现的呢?那就从jdbc开始学习。
在使用jdbc与数据库交互时,都是通过Connection来操作的。
默认情况下,Connection会自动提交事务,即每执行一条SQL语句,也就对应一个事务。
但是在开发过程中,一个事务通常会管理一组SQL统一的提交,来保证数据的安全。
这时,就需要Connection#setAutoCommit(false)来阻止Connection的自动提交,并通过Connection#setTransactionIsolation()设置事务的隔离级别(具体可以百度)。
当sql准备完成后,再通过Connection#commit提交事务,或者通过Connection#rollback()回滚事务。
代码示例:
package jdbcTransactionDemo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import org.junit.Test; public class transactionDemo { @Test public void demo() throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1/test", "root", "123456"); conn.setAutoCommit(false);//关闭自动提交机制 conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);//设置事务隔离级别 try { Statement stmt=conn.createStatement(); int rows=stmt.executeUpdate("insert into user(user_name,password) values(\"小明\",\"psw123456\")"); System.out.println(rows); rows=stmt.executeUpdate("update user set user_name=\"小红\" where user_name=\"小明\""); System.out.println(rows);
conn.commit();//事务提交 }catch (Exception e) { System.out.println("事务回滚了"); e.printStackTrace(); conn.rollback();//事务回滚 } } }