当有多个用户并发向数据库执行写数据的操作时,
总会出现数据库只写入1,2条数据的情况,其它用户的数据并没有写入
请问这个需要将insert方法做同步处理吗
另外,是否所有的写入数据库的方法都需要作同步处理了
这样不就影响系统的性能吗环境:oracle9i+windows系统
程序结构:jsp + struts谢谢大家,请帮忙看看这个问题

解决方案 »

  1.   

    suppose DB should do this job, but sometimes if a good deal of insertion occur concurrently ,you maybe need to change the Locking schema of the table.not sure...just a suggestion...
      

  2.   

    数据库本身就支持并发执行,不需要自己干预,你可以将要写入的数据用同一事务提交,出错可以回滚。可能是你的jdbc读写有问题
      

  3.   

    一般说来insert是不需要同步的,update,delete是需要的.
    但如果你用了一些自己的逻辑(如取最大的ID+1等),可以考虑同步.
    Oracle加锁: lock table tableA in XXX mode nowait
    其实更好的是自己在前端程序中进行同步,最好不要用数据库的锁,要不很可能造成死锁.
      

  4.   

    select mySeq.nextval into :newID from dual
    触发器里是这样用的吗?要不把问题先简单化,先不要这个自增主键.就是简单的insert,看看还有这个问题没有?
    如果没有了,那就说明是在取这个mySeq的值出问题了.
      

  5.   

    现在我已经在写入数据的方法处加了同步,
    但不起作用,还是有其它人的数据没有写入到数据库中,
    程序如下:
    synchronized (threadCounterLock)
          {
            if ( -1 != db.executeSql(sql))
            {
                 opFlag = true;
            }
            else
            {
              throw new Exception();
            }
          }
    为什么亚
      

  6.   

    回复人: goingon99() ( ) 信誉:97  2005-12-21 10:23:50  得分: 0  
    数据库本身就支持并发执行,不需要自己干预,你可以将要写入的数据用同一事务提交,出错可以回滚。可能是你的jdbc读写有问题这是正解,只要放到同一个事务里就不会有并发的问题
      

  7.   

    回复: zhengcun(阿卡拉) 
      但我的是单表操作,也需要用事务吗