事务的好处就是保证多表操纵的一致性。事务具有原子性,一个事务内的操作要么全部执行成功,要么全部执行失败,默认情况下,JDBC对数据库的操作是自动提交的。我们通过conn.setAutoCommit(false);可以设置为自动提交,如果其中有一步操作失败,可以使用RollBack进行回滚。
下面的例子先执行插入,后执行删除,如果中间有异常,可以使用rollback进行回滚
//创建连接
public static Connection createCon()
{
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //classLoader,加载对应驱动
try {
conn = (Connection) DriverManager.getConnection(url, username, pwd);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
Connection conn=dao.createCon();
try {
conn.setAutoCommit(false);//禁止JDBC自动提交
//添加操作
String addsql="INSERT skus (skuname,skucode,categoryid) VALUES (?,?,?) ";
try {
PreparedStatement pst=(PreparedStatement)conn.prepareStatement(addsql);
pst.setString(1, "短裤");
pst.setString(2, "00008");
pst.setShort(3,(short) 6);
pst.executeUpdate();
pst.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
//制造异常
String ss="aa";
Integer.parseInt(ss);
//删除操作
String sql="DELETE FROM skus WHERE skucode='00005' ";
try {
PreparedStatement pst=(PreparedStatement)conn.prepareStatement(sql);
pst.executeUpdate();
pst.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
conn.commit();//手动提交
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}