PreparedStatment prep = ...;
prep.executeUpdate();
ResultSet newKey = prep.getGeneratedKeys();
if(!newKey.next()) error();//不应该到达这里
int newID = newKey.getInt(1);
newKey.close();

解决方案 »

  1.   

    你可以使用synchronize 关键字将执行数据库操作的代码段包含进来,这样就可以让程序控制你的同步问题,不过会造成程序性能方面的下降
      

  2.   

    首先不赞成用auto_increment,因为这会造成其它很多麻烦。
    如果必须用的话,这样处理:
    1、开始事务
    2、取bk1表最大ID.
    3、bk1插入。
    4、最大ID变量增1。
    5、tongji表插入。
    6、提交事务。
      

  3.   

    ResultSet newKey = prep.getGeneratedKeys();
    它就是用来返回刚刚prep语句中所产生的auto_increment的值啊,这个在JDK1.4的文档中有说明。不过这个方法不是所有的数据库都支持,但MySQL是支持的
      

  4.   

    如果不使用主键的话是可以使用一个专用的表来维护自己一系列表的主键的值,
    但是不建议使用select max(id)这样的方法来做,这个不是一个好方法,
    因为如果你不锁定表的话会出现并发冲突问题,而且效率不高。
      

  5.   

    支持 ChDw(米):如果不使用主键的话是可以使用一个专用的表来维护自己一系列表的主键的值