JSP Web开发入门系列(二)---JDBC事务管理

    数据库的事务管理核心是:ACID。本文主要涉及的是其中的原子性(Atomic)。原子性,遵循“All or Nothing”原则。简单地来说就是将任意多个SQL语句看作一个整体,只有所有的这些SQL全部成功执行了,DBMS才会保存对数据库的修改,称之为事务提交;否则,数据库恢复到SQL语句执行前的状态,称之为事务回滚。不同数据库有不同版本的回滚版本。

    JDBC下有两种事务模式分别为隐式和显式模式。前者是JDBC下默认开启的,不必通过事务提交,直接将修改的数据保存在数据库中。后者使用setAutoCommit 方法来将隐式转换成显式模式,手工提交事务,即是说显示模式需要使用commit方法提交后,对数据库的修改才生效。 setAutoCommit方法定义如下:

void setAutoCommit( boolean autoCommit) throws SQLEXception;  

  以下的代码是使用PreparedStament对象执行的动态SQL来对数据库进行事务管理。主要是向数据库中pet表增加一条记录。

 

代码
package JDBCTest;
import java.sql. * ;
public class Transaction {

/**
*
@param args
*
@author viki
* 事务提交与回滚
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Class.forName( " com.mysql.jdbc.Driver " );
String serverName, dbName,userName,passWord;
serverName
= " localhost " ;
dbName
= " viki " ;
userName
= " root " ;
passWord
= " 123 " ;
String url
= " jdbc:mysql:// " + serverName + " / " + dbName + " ?characterEncoding=UTF8 " ;
Connection conn
= DriverManager.getConnection(url,userName,passWord);
try
{
// 开始事务
conn.setAutoCommit( false );
Statement stmt
= conn.createStatement();
System.out.println(
" Update the record: " + stmt.executeUpdate( " UPDATE pet SET sex ='m' " ));
stmt.close();
PreparedStatement pstmt
= conn.prepareStatement( " INSERT INTO pet (name,owner,species) VALUES (?,?,?) " );
pstmt.setString(
1 , " dave " );
pstmt.setString(
2 , " viki " );
pstmt.setString(
3 , " pig " );
System.out.println(
" Update the record: " + pstmt.executeUpdate());
pstmt.close();
// 提交事务
conn.commit();
}
catch (Exception e) {
// TODO: handle exception
// 事务回滚
conn.rollback();

}
}

}

 

 

    只有在事务提交之后,数据库才会保存修改数据。在catch块中,使用了回滚方法,如果SQL语句出错的话,将会抛出异常,程序执行回滚任务。数据库将不会更改。

 

转载于:https://www.cnblogs.com/ventlam/archive/2010/11/01/mysqltransaction.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值