关于操作数据库同步的问题?

yunjava 2004-10-22 02:16:05
有2表A,B
每次向表A写1条信息, 先把B中的mubid列的值取出加1后再在更新到B表中,再把这个加1后的mubid数值和这条信息加入到A表中。

在用servlet写方法的时候 先在表B中取出mubid值再加1 然后在用这个值更新表B的numbid列(每次写入表A时更新表B所以表B只有1行数据,这条记录随着表A插入数据而更新 )并把值插入到表A的number列中

我想问这个B/S的结构的东东 如果有2个客户同时对数据库进行操作 当第一个客户刚取出B中的mubid值(比如这个时候mubid值是66)时候,还没有进行加1的计算的时候,第2个客户也开始取出mubid值,他取的也是66 然后第2个客户进行加1的操作这时mubid值等于77。 然后第一个客户也执行加1的计算,那第1个客户的mubid值也是77 了,在A表中是不如允许有2个相同的mubid 请问我应该怎么办 是不是要写个同步语句块或着有什么其他的办法?
...全文
84 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xiaomineer 2004-10-25
to:yunjava(呵呼) ,我说的方法与tigeryu(吴越小虎)不是一样的,应该是与 vcao(胶泥) 的方法类似。我用过的是,在创建完链接之后,对数据库进行操作之前调用dbc.setAutoCommit(false);dbc表示一个连结,在做完所有数据库操作之后,用dbc.commit();
回复
Tabalulu 2004-10-22
用事务处理,或者用数据库的procedure
回复
jnu_wen 2004-10-22
应该不算是数据库同步的问题,应该是多线程访问资源同步的问题吧。
回复
jnu_wen 2004-10-22
把方法声明成synchronized,这样多个线程在同一时刻只能有一个线程访问此方法,这样数据就会同步了。
回复
yunjava 2004-10-22
xiaomineer(我要好好学习天天向上) 说的“放在一个事务里面处理”与 tigeryu(吴越小虎)说的“
假设你这个操作的方法名叫作 add,请这样定义你的方法public static synchronized add()
” 是一样的方法吗? 我选哪个好 哪个简单些?
回复
xiaomineer 2004-10-22
放在一个事务里面处理。只有一个人进行完了全部过程的数据库操作,其他人才能操作数据库
回复
vcao 2004-10-22
创建一个autoCommitOff的连接,当对数据库所有的操作都完成后再调用Connection.Commit().
回复
morrigan 2004-10-22
能说说原因吗?为什么这么写?关注ing
回复
wuyue-tiger 2004-10-22
假设你这个操作的方法名叫作 add,请这样定义你的方法public static synchronized add()
回复
yunjava 2004-10-22
那位朋友解答一下 小弟比较着急,
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告