jdbc没有,也许某种特定的DBMS有提供也说不定

解决方案 »

  1.   

    select * from table for update
      

  2.   

    应该可以的,但是我想不同的数据库和不同的jdbc driver会有所不同
      

  3.   

    这与jdbc关系不大,要看你用什么数据库
      

  4.   

    你可以用同步(synchronized)的方法来间接实现这一功能,jdbc中好象没有,一般这种功能只能是DBMS上提供的。
      

  5.   

    现在是没有这种功能的
    也许以后会有吧
    期待ing...
      

  6.   

    在用事务处理时。。
    dbcon.setAutoComit(false);如果超做完后,没有提交或回滚。那么这个表就处于锁定状态啊。
    jdbc API支持事务对数据库的加锁,并且提供了5种操作支持,2种加锁密度。5种支持:static int TRANSACTION_NONE = 0; →禁止事务操作和加锁。static int TRANSACTION_READ_UNCOMMITTED = 1;→允许脏数据读写(dirty reads)、重复读写(repeatable reads)和影象读写(phntom reads)static int TRANSACTION_READ_COMMITTED = 2;→禁止脏数据读写(dirty reads),允许重复读写(repeatable reads)和影象读写(phntom reads)static int TRANSACTION_REPEATABLE_READ = 4;→禁止脏数据读写(dirty reads)和重复读写(repeatable reads),允许影象读写(phntom reads)static int TRANSACTION_SERIALIZABLE = 8;→禁止脏数据读写(dirty reads)、重复读写(repeatable reads)和允许影象读写(phntom reads)2种密度:最后一项为表加锁,其余3~4项为行加锁。 脏数据读写(dirty reads):当一个事务修改了某一数据行的值而未提交时,另一事务读取了此行值。倘若前一事务发生了回滚,则后一事务将得到一个无效的值(脏数据)。重复读写(repeatable reads):当一个事务在读取某一数据行时,另一事务同时在修改此数据行。则前一事务在重复读取此行时将得到一个不一致的值。影象读写(phantomreads):当一个事务在某一表中进行数据查询时,另一事务恰好插入了满足了查询条件的数据行。则前一事务在重复读取满足条件的值时,将得到一个额外的“影象“值。Jdbc根据数据库提供的缺省值来设置事务支持及其加锁,当然,也可以手工设置:setTransactionIsolation(TRANSACTION_READ_UNCOMMITTED);可以查看数据库的当前设置:getTransactionIsolation()需要注意的是,在进行手动设置时,数据库及其驱动程序必须得支持相应的事务操作操作才行。上述设置随着值的增加,其事务的独立性增加,更能有效的防止事务操作之间的冲突;同时也增加了加锁的开销,降低了用户之间访问数据库的并发性,程序的运行效率也回随之降低。因此得平衡程序运行效率和数据一致性之间的冲突。一般来说,对于只涉及到数据库的查询操作时,可以采用TRANSACTION_READ_UNCOMMITTED方式;对于数据查询远多于更新的操作,可以采用TRANSACTION_READ_COMMITTED方式;对于更新操作较多的,可以采用TRANSACTION_REPEATABLE_READ;在数据一致性要求更高的场合再考虑最后一项,由于涉及到表加锁,因此会对程序运行效率产生较大的影响。另外,在oracle中数据库驱动对事务处理的缺省值是TRANSACTION_NONE,即不支持事务操作,所以需要在程序中手动进行设置。
      

  7.   

    我做过的项目中有这种做法,会有一个加锁表,每次操作数据库德时候先去查这个表,看这个表中是否有记录,表中的每一条记录都是由表名和驻key组成的!所以就可以实现加锁解锁的功能!更新数据库时先检索一下加锁表,看是否有记录,没有就插一条纪录,做完操作再删除!是个比较简单的方法!不过有一点,出exception的时候一定要删除那条记录!