一客户提交一远程方法,提交中,程序经过处理,修改数据库
但是这同一客户同一时间2台电脑提交或者多个客户端提交,如何能禁止他同时提交而修改数据库错误
而在同一时间,必须要允许其他用户提交过来请求.请问,如何能做到?

解决方案 »

  1.   

    将修改数据库的方法设置成 synchronized在有..数据库的设计也要改那个叫什么来的....数据库设计本身也有防止这样的设计..而不完全依赖语言
      

  2.   

    sql中有一个叫做事务的概念
    意思就是我有几个操作 他们合并在一起是一个原子操作 不可以拆分的
    当一个事物提交的时候 事务中的所有操作都进行提交 如果失败的话 可以返回提交之前的状态
    将你的数据库操作变成事务就可以了
      

  3.   

    不知道你是通过什么来操作数据库中的数据的,如果是通过hibernate,那么操作数据库的是session,那可以用ThreadLocal线程池来维护本地session变量。用户拿到的都是一个独立的session,改变的都是自己的副本不会对其他的产生影响。不会存在线程上的问题。代码如下public class HibernateUtils {
    private static Configuration conf;
    private static SessionFactory factory;
    private static ThreadLocal<Session> tl;

    static {
    conf = new Configuration().configure();
    factory = conf.buildSessionFactory();
    tl = new ThreadLocal<Session>();
    }

    /**
     * 获得session
     * @return 一个session实例,是线程安全的
     */
    public static Session getSession() {
    Session session = tl.get();
    if(session == null) {
    session = factory.openSession();
    tl.set(session);
    }
    return session;
    }

    /**
     * 关闭session
     */
    public static void closeSession() {
    Session session = tl.get();
    if(session != null) {
    session.close();
    tl.set(null);
    }
    }
    }如果你用的是jdbc直接访问,那么可以通过事务处理机制来同步,因为如果多个线程同时操作一个数据,必然会出问题,事务会回滚,不会提交。
    connection.setAutoCommit(false),提交完成后,connection.commit(),再connection.setAutoCommit(true)。至于加synchronized 同步是多余的。