Java对数据库sql/hql操作实现同步

qinglo_ 2012-12-16 09:01:34
对于Java web项目中很多时候在对数据库的操作中,如银行转账这一操作中 如何实现同步?
如表account中有 account_Id,money两个字段,要实现转账或者取款的操作,给出要实现同步该如何编码
给个dao的方法就行,谢谢各位大神了!
...全文
277 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
qinglo_ 2013-01-05
  • 打赏
  • 举报
回复
引用 14 楼 sssskd 的回复:
那如果你有更好的方法,咱们可以相互讨论下。 我以前做银行系统就是这么弄的。 同步方法有两种形式: 一、方法同步。 二、方法内部对数据进行CRUD时,采用同步块进行同步。
不是说你这方法不行,你的思路是目前我能想到或者别的渠道获得方案中最好的了 以上说的效率问题只是我个人的理解,或许综合servlet的线程问题 这个效率问题就不再是问题了 个人想法
sssskd 2012-12-27
  • 打赏
  • 举报
回复
那如果你有更好的方法,咱们可以相互讨论下。 我以前做银行系统就是这么弄的。 同步方法有两种形式: 一、方法同步。 二、方法内部对数据进行CRUD时,采用同步块进行同步。
qinglo_ 2012-12-26
  • 打赏
  • 举报
回复
引用 11 楼 sssskd 的回复:
引用 9 楼 qinglo_ 的回复: 引用 6 楼 sssskd 的回复:建议点: 1、在dao方法进行数据操作是,防止并发问题,特别是银行方面的系统,所以要加synchronized同步关键字。 2、在对数据表进行增删改时,我们也应该进行事务控制,从而保持数据的一致性。 如: // 打开事务 con.setAutoCommit(false); // 提交事务 ……
那这样效率是不是太低了 这时间段只能为一个用户服务 那其他的用户就不能为其他的账户操作 貌似不符合实际吧
sssskd 2012-12-24
  • 打赏
  • 举报
回复
引用 9 楼 qinglo_ 的回复:
引用 6 楼 sssskd 的回复:建议点: 1、在dao方法进行数据操作是,防止并发问题,特别是银行方面的系统,所以要加synchronized同步关键字。 2、在对数据表进行增删改时,我们也应该进行事务控制,从而保持数据的一致性。 如: // 打开事务 con.setAutoCommit(false); // 提交事务 con.comm……
加上synchronized关键字,表示这个方法(行为)同时只能由一个用户去操作,其它的用户需要去等待。只有当这个用户执行完这个方法时,释放同步锁由下一个用户继续操作此方法。从而保证数据的一致性。
脆爽 2012-12-24
  • 打赏
  • 举报
回复
update account set money+=? where account_Id=?
拎干的毛巾 2012-12-21
  • 打赏
  • 举报
回复
引用 6 楼 sssskd 的回复:
建议点: 1、在dao方法进行数据操作是,防止并发问题,特别是银行方面的系统,所以要加synchronized同步关键字。 2、在对数据表进行增删改时,我们也应该进行事务控制,从而保持数据的一致性。 如: // 打开事务 con.setAutoCommit(false); // 提交事务 con.commit();
正解~
qinglo_ 2012-12-20
  • 打赏
  • 举报
回复
引用 6 楼 sssskd 的回复:
建议点: 1、在dao方法进行数据操作是,防止并发问题,特别是银行方面的系统,所以要加synchronized同步关键字。 2、在对数据表进行增删改时,我们也应该进行事务控制,从而保持数据的一致性。 如: // 打开事务 con.setAutoCommit(false); // 提交事务 con.commit();
加了synchronized 后是针对一个对象 还是说针对所有的对象一起同步或者说是对某一账户的那些对象一起同步
qinglo_ 2012-12-19
  • 打赏
  • 举报
回复
仅仅是事务好像还不够 我对同步的思想理解的不是很透彻 ,我这样说不知道是不是现实应用中我们需要的同步,比如一个业务量比较大的用户,每天有很多的人往他账户里转账,就会碰到这样的情况,某一时刻有两人或两人以上的人同时给他转账(或者刚好有人给他转账的时候 他在取钱、存钱或者转账给别人)可能会出现数据混乱 我们就必须让服务器对这一操作一个个的实现
Minty_Tong 2012-12-18
  • 打赏
  • 举报
回复
用事务~~~~
失落夏天 2012-12-17
  • 打赏
  • 举报
回复
读取的时候(getMoney()不限制,在对银行转账进行写入操作的方法(setMoney())前,添加上一个 synchronize关键字,这样就能实现基本的同步了。
sssskd 2012-12-17
  • 打赏
  • 举报
回复
建议点: 1、在dao方法进行数据操作是,防止并发问题,特别是银行方面的系统,所以要加synchronized同步关键字。 2、在对数据表进行增删改时,我们也应该进行事务控制,从而保持数据的一致性。 如: // 打开事务 con.setAutoCommit(false); // 提交事务 con.commit();
dxqrr 2012-12-17
  • 打赏
  • 举报
回复
LZ的意思是事务吧
suciver 2012-12-17
  • 打赏
  • 举报
回复
楼主这个需求应该要用事务吧
卖红薯 2012-12-17
  • 打赏
  • 举报
回复
// 打开事务 con.setAutoCommit(false); // 提交事务 con.commit(); 不知是否有用
ylovep 2012-12-17
  • 打赏
  • 举报
回复
楼主表达的意思貌似是需要事务管理吧

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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