有没有办法实现几条jsp语句的原子化(就是一口气执行完,不中断,呵呵,大侠别见笑)

washy781231 2003-04-06 03:43:22
小弟在用jsp编写程序时需要用到类似以下的操作:
先读取数据库中的某一个整型字段,然后把该值+1或-1后更新该字段(比如对论坛上每个帖子的点击数的记录)。可能要对多个表进行类似工作。我希望读值,+-1,更新,这整个过程一气完成,也就是不会被别的客户请求中断,以免造成数据的失真(就像共享,冲突)。于是就想请问各位大侠有没有什么语句可以实现几个句子的原子化?我的意思是,我是在jsp页中写这些语句,不用线程,有没有什么像“锁”一样的语句将我想要的几句包起来?唉,小弟的水平有限,不知道说清楚没有,各位见谅。
...全文
35 8 点赞 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
AngusZhang 2003-04-07
Connection conn = ds.getConnection();
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
int nRow[] = null;
int nRow[0] = stmt.executeUpdate("insert into A xxxxxxx");
int nRow[1] = stmt.executeUpdate(("insert into B xxxxxxx");
.
.
.
for(int i=0;i<nRow.length;i++){
if(nRow[i]==0){
stmt.close();
conn.rollback();
}
}else{
stmt.close();
conn.commit();
}
  • 打赏
  • 举报
回复
aleccheung 2003-04-07
记得jdbc里面有个回滚的方法,比如交易失败就所有数据回滚,
想不起来了。
但是我觉得楼主想得有点多了。
  • 打赏
  • 举报
回复
ajiao 2003-04-07
jsp程序本就是在服务器端处理的阿
  • 打赏
  • 举报
回复
cgsun 2003-04-06
存储过程
你可以到SQL里去问问。
  • 打赏
  • 举报
回复
AllError 2003-04-06
存储过程
  • 打赏
  • 举报
回复
washy781231 2003-04-06
哦,就是在服务端处理的。怎么办?请大侠指教。
  • 打赏
  • 举报
回复
ajiao 2003-04-06
第一种方法 你可以通过调用存储过程,一次性执行这些sql语句

第二种方法 调用Statement对象的addBatch方法
例如: stmt.addBatch("insert into A xxxxxxx");
stmt.addBatch("insert into B xxxxxxx");
stmt.addBatch("insert into C xxxxxxx");
然后调用executeBach()
int[] counts=stmt.executeBatch();
最后编历数组counts,查看每个元素是否1
(每个counts数组元素对应上述三条执行语句影响纪录的条数,此例应为1)
如果有一个不为1的,你可以认为插入出错,调用connection对象的rollback()回滚
整个批处理修改

具体的过程参考api document







  • 打赏
  • 举报
回复
p9 2003-04-06
可能性不大,多个jsp页面在同时运行这段程序是如何同步。
当然你可以在服务段设一个同步令牌,页面操作前需要获取这个令牌。
但这样效率太低也不安全。
这种东西不能放在jsp页面中,最好放在服务端处理
  • 打赏
  • 举报
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2003-04-06 03:43
社区公告
暂无公告