JDBC中如何进行事务处理
1、在jdbc中,默认事务是自动提交的,如果我们需要自己事务,我们代码需要手工控制事务的提交。
package com.gwolf;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcTest {
public static void main(String[] args) {
Connection conn=null;
Statement stmt=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:jdbctest", "test", "test");
conn.setAutoCommit(false);
stmt = conn.createStatement();
stmt.addBatch("insert into dept values (51, '500', 'ccc')");
stmt.addBatch("insert into dept values (52, '600', 'ddd')");
stmt.addBatch("insert into dept values (53, '700', 'eee')");
stmt.executeBatch();
conn.commit();
conn.setAutoCommit(true);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch(SQLException e) {
e.printStackTrace();
try {
if(conn != null)
{
conn.rollback();
conn.setAutoCommit(true);
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally {
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}

2、如果要手动控制事务,我们必须把jdbc自动提交事务关闭:
conn.setAutoCommit(false);

3、接下来我们手动提交事务:
conn.commit();
conn.setAutoCommit(true);

4、在异常处理中回滚整个事务。

5、切记一点,一定要在finally块中关闭数据库连接,释放资源。
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

6、我们这个事务业务代码如下:
conn.setAutoCommit(false);
stmt = conn.createStatement();
stmt.addBatch("insert into dept values (541, '5020', 'c5cc')");
stmt.addBatch("insert into dept values (542, '6020', 'd5dd')");
stmt.addBatch("insert into dept values (534, '7020', 'e5ee')");
stmt.executeBatch();
conn.commit();
conn.setAutoCommit(true);
