星期日, 2月 05, 2012

[Java] JDBC Transaction

本篇說明如何在JDBC實作Transaction機制。

步驟一:MsSQL設定:
設定INNODB資料表

Tip:MySQL 對不同的 Table 可以選擇不同的 Implementation 方式,像是最早的 ISAM (ISAM 將在 MySQL 5.0 以後被移除),後來的 MyISAM (因為要做 Transaction 時要預留多一點空間來進行處理,因此如果不須使用 Transaction 時,直接建 Table 就會採用 MyISAM 的格式)、把 Table 存在記憶體中提升效能的 HEAP Table,以及有支援 Transaction 的 INNODB 格式。
步驟二:如何在Java code執行Transcation



使用setAutoCommit方法將預設的auto commit的功能設為false, 當執行完所有的Sql Statements後,再呼叫commit方法完成所有動作。

conn.setAutoCommit(false);
try{
PreparedStatement updateSales = _
conn.prepareStatement(
"UPDATE PRODUCT_SALES SET NUMBER_OF_SALES=NUMBER _
_OF_SALES+1 WHERE
PRODUCT_ID = ?");
updateSales.setString(1, productId);
updateSales.executeUpdate();
PreparedStatement updateInventory = _
conn.prepareStatement(
"UPDATE INVENTORY SET STOCK=STOCK-1 _
WHERE PRODUCT_ID = ?");
updateInventory.setString(1, productId);
updateInventory.executeUpdate();
conn.commit();
}
catch(SQLException se){
conn.rollback();
}
conn.setAutoCommit(true);

Reference:
Using Database Transactions with JDBC
MySQL Version over 3.23.49 and JDBC Transactions (下)

沒有留言:

張貼留言

留個話吧:)