关于事务控制的问题!

xulei_ice 2004-04-15 01:32:28
思路:
在一段程序里要用两个存储过程去写数据库,但是必须做到“要么都成功,提交; 要么失败,都会滚”。
程序:
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); Connection con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=workflowdb","sa","");
PreparedStatement cs=null;
//删除原来的信息
cs = con.prepareStatement("{call dt_deleteworkflow_u(?)}");
cs.setString(1,processid);
con.setAutoCommit(false); //在这里设置人工控制事务
try{
cs.executeUpdate();
}
catch(SQLException sqle){
con.rollback();
con.setAutoCommit(true);
return;
}
//写流程信息
cs = con.prepareStatement("{call dt_insertprocess_u(?,?)}"); //出错的地方!!!
cs.setString(1,processid);
cs.setString(2,graphtestAPP.GetInstance().GetWorkflowSeri().GetProcessSeri().GetProcessName());
try{
cs.executeUpdate();
}
catch(SQLException sqle){
con.rollback();
con.setAutoCommit(true);
return;
}
con.commit();
con.setAutoCommit(true);

错误内容:不能给一个人工型事务的连接创建多个PreparedStatement 。

//如果我将让事务自动提交或会滚的话,程序就可以。但是我必须人工的控制事务。请问各位达人我该如何作呢???谢谢!!


...全文
82 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xulei_ice 2004-04-15
  • 打赏
  • 举报
回复
我的问题已经解决了。
在每个cs结束后应该加上cs.close().

xulei_ice 2004-04-15
  • 打赏
  • 举报
回复
TO:maobing

还是没有解决!

问题:Can't start a cloned connection while in manual transaction mode.
maobing 2004-04-15
  • 打赏
  • 举报
回复
有个问题,老兄怎么用预处理来执行存储过程,为什么不用CallableStatement,用预处理可以吗?
maobing 2004-04-15
  • 打赏
  • 举报
回复
PreparedStatement cs=null;
//删除原来的信息
cs = con.prepareStatement("{call dt_deleteworkflow_u(?)}");
cs.setString(1,processid);
con.setAutoCommit(false); //在这里设置人工控制事务
----------------------------
换成这样看看
con.setAutoCommit(false); //在这里设置人工控制事务
PreparedStatement cs=null;
//删除原来的信息
cs = con.prepareStatement("{call dt_deleteworkflow_u(?)}");
cs.setString(1,processid);


---------------------------------

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧