java事务基础的问题
我都找不到相应的版块提问。。。。。import java.sql.*;
public class TestTransaction {
/**
* @param args
*/
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
PreparedStatement pstmt = null;
try {
Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_1","root","123456");
conn.setAutoCommit(false); //设置是否自动提交——否
stmt = conn.createStatement();
stmt.addBatch("insert into dt values(4,'qq','N','12')");
stmt.addBatch("insert into dt values(5,'qq','N','132')");
//如果这个地方报SQLException ,也就是说下面的conn.commit();没有执行那回滚操作是否是多余的呢
stmt.addBatch("insert into dt values(6,'QQ','N','14')");
stmt.executeBatch();
conn.commit();
conn.setAutoCommit(true);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e){
try {
conn.rollback(); //这个地方的回滚操作是不是多余的啊
conn.setAutoCommit(true);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
} finally {
try {
if(stmt != null)stmt.close();
if(pstmt != null)pstmt.close();
if(conn != null)conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
问题1://如果这个地方报SQLException ,也就是说下面的conn.commit();没有执行那回滚操作是否是多余的呢
如果有SQLException 的话,提交确实是多余的,程序会进入catch (SQLException e){进行回滚,但那个conn.commit(); 你不能不写啊,你还要考虑程序正常执行的情况,
问题2: 同样,第二个地方的那个回滚不是多余的,那就是问题1中说的,如果程序出现SQL异常,才会进入异常捕获,去执行那个回滚,如果没有SQL异常,就正常提交。
求大神给我一个解释啊:Q
页:
[1]