jsp中用mysql实现事物处理.高手们进来看看!不会也来捧个场,来者有分!

fightplane 2004-02-03 10:08:18
我建立的表类型是BDB
程序如下:
---------------------------------------------------
public void registerAttraction(Attraction attraction)
throws AttractionException{

validateAttraction(attraction);

Connection con = null;

try{
con = pool.getConnection();
con.setAutoCommit(false);
AttractionDAO attractionDAO = new AttractionDAO(con);
attractionDAO.create(attraction);

UserRoleDAO userRoleDAO = new UserRoleDAO(con);
UserRole userRole = new UserRole();
userRole.setUserId(attraction.getUserId());
userRole.setRoleName(Role.ATTRACTION);
userRoleDAO.create(userRole);

con.commit();
}catch(Exception e){
try{
if(con != null){
con.rollback();
throw new AttractionException(e.getMessage());
}
}catch(SQLException sqle){
System.out.println("AttractionBO.registerAttraction sqle:" + sqle);
e.printStackTrace();
throw new RuntimeException("error.unexpected");
}
}finally{
try{
con.setAutoCommit(true);
if(con != null){
con.close();
}
}catch(SQLException sqle){
sqle.printStackTrace();
throw new RuntimeException("error.unexpected");
}
}
}
---------------------------------------------------------------
我事先已经执行con.setAutoCommit(false);将自动提交关闭.
为了测试是否实现了事物处理我故意将userRoleDAO.create(userRole);
操作中的表名改错.看看con.rollback();是否能够将数据写回.结果
attractionDAO.create(attraction);还是执行了.为什么呢?
...全文
68 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2004-02-03
  • 打赏
  • 举报
回复
up
1228joes 2004-02-03
  • 打赏
  • 举报
回复
up
xqi8 2004-02-03
  • 打赏
  • 举报
回复
gz
fightplane 2004-02-03
  • 打赏
  • 举报
回复
con.setAutoCommit(false);开始!con.setAutoCommit(true);结束.
fightplane 2004-02-03
  • 打赏
  • 举报
回复
我在if(con != null){
con.rollback();
System.out.println("con.rollback()ok??");
throw new AttractionException(e.getMessage());
}
加了一段输出System.out.println("con.rollback()ok??");执行后能够显示出来
UserRoleDAO.findByPrimaryKey SQLxception e1:java.sql.SQLException: Syntax error or access violation:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server versi
on for the right syntax to use near '= 'qwer' AND role_name = 'attraction'' at line 1
con.rollback()ok??
ye255 2004-02-03
  • 打赏
  • 举报
回复
你是在那里标志了事务开始呀,我对mysql不熟,没看出来。
tele 2004-02-03
  • 打赏
  • 举报
回复
为什么发了帖子,是别人的名字???郁闷!!!
episome 2004-02-03
  • 打赏
  • 举报
回复
你的userRoleDAO.create(userRole)中是否有异常处理,如果有的话,就不会再抛出异常了,那样,你的这个函数中的try也就不能获得异常了,con.rollback();也就不执行了
fightplane 2004-02-03
  • 打赏
  • 举报
回复
userRoleDAO.create(userRole);和attractionDAO.create(attraction);做成一个事物来进行操作!我故意让userRoleDAO.create(userRole);出错,正常attractionDAO.create(attraction);就不应该被执行了.可是attractionDAO.create(attraction);还是执行了!
yupingping 2004-02-03
  • 打赏
  • 举报
回复
up
hjwl 2004-02-03
  • 打赏
  • 举报
回复
MySQL 4.0以上支持事务控制
Leemaasn 2004-02-03
  • 打赏
  • 举报
回复
好像听说MySQL不支持事务控制,不知道是不是这个原因?
lhbf 2004-02-03
  • 打赏
  • 举报
回复
怎么有这种情况发生呢?表名都不正确数据库根据什么要插入到你的表中呢?

另外你可以这样做实验,建一个有主键的表插入两条主键值相同的记录。
BillyW 2004-02-03
  • 打赏
  • 举报
回复
是不是mysql不支持事务处理?
loveknife 2004-02-03
  • 打赏
  • 举报
回复
up
fightplane 2004-02-03
  • 打赏
  • 举报
回复
为什么BDB不可以呢?
s3p 2004-02-03
  • 打赏
  • 举报
回复
up
ESoftWind 2004-02-03
  • 打赏
  • 举报
回复
将MySql的表类型改成InnoDB就可以了
l7980 2004-02-03
  • 打赏
  • 举报
回复
up
StriveandStrive 2004-02-03
  • 打赏
  • 举报
回复
up

81,092

社区成员

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

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