
begin tran --开始处理数据时,开启事务
--下面是具体的处理语句
insert into 表 values(1)
if @@error<>0 --如果处理语句出错,回滚事务
begin
rollback tran
goto lbexit
end
update 表 set 字段=1
if @@error<>0 --如果处理语句出错,回滚事务
begin
rollback tran
goto lbexit
end
commit tran --所有执行成功,提交事务
lbexit:
JAVA的话,可以在连接对象上启用事务
可以把要执行的四个SQL语句写到同一个List中再调用此方法你也可以自己写
主要注意
执行sql插入前要取消自动提交
con.setAutoCommit(false)
全部sql语句执行完成后再提交
con.commit()
执行过程抛出异常则回滚
con.rollback()
希望对你有帮助
public
boolean
exeupdate(List<String>
sqls)
throws
SQLException
{
boolean
flag
=
false
openPoolConnection()//创建连接
try
{
//
con.setAutoCommit(false)//取消自动提交
for(int
i=0i<sqls.size()i++)
{
pstmt
=
con.prepareStatement(sqls.get(i))
int
rows
=
pstmt.executeUpdate()
}
flag
=
true
con.commit()//提交
}
catch
(Exception
e)
{
con.rollback()//回滚
e.printStackTrace()
}
finally
{
this.closeAll()//关闭连接
数据集
语句对象
}
return
flag
}
//举例子,比如你在写一个级联删除的方法的时候,为了保证数据完整性,删除的时候一定要确定该删的都删了才行,否则就要回滚,下面是删除方法的例子:public boolean delete(int sID) {//成功删除会返回truedbc = new DataBaseConnection()//根据你自己的方式创建数据库的连接
Connection con = dbc.getConnection()//得到Connection
try {
con.setAutoCommit(false)// 更改JDBC事务的默认提交方式,默认是true,是自动提交
dbc.executeUpdate("delete from xiao where ID=" + sID)//删除
dbc.executeUpdate("delete from xiao_content where ID=" + sID)//删除
dbc.executeUpdate("delete from xiao_affix where bylawid=" + sID)//删除
con.commit()//提交JDBC事务,如果没问题,这时才真正的删除了
con.setAutoCommit(true)// 恢复JDBC事务的默认提交方式,这是个好习惯
dbc.close()//关闭连接
return true//删除成功
}
catch (Exception exc) {
con.rollBack()//回滚JDBC事务,出现异常,为保证数据完整性,此次 *** 作回滚,不删除
exc.printStackTrace()//输出异常信息
dbc.close()//关闭连接
return false//删除失败
}
}//顺便说一下,java中JDBC的事务管理,跟你用的是什么数据库没关系,用什么数据库都是这样
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)