一个页面上分为2个部分,一个是编辑 一条消息 内容,一个是选择 该 消息发给 哪个用户,分为2个表 一个是消息 表,一个是 消息发送用户表 主要字段 用户ID,消息ID ,
 当编辑完了消息和 选择用户后 ,提交 后,
  现在有个问题就是:在 消息发送用户表 写数据的时候 ,消息ID这个时候还没有产生怎么往 消息发送用户表写数据,
   有个 办法  把消息ID 设置成自动增长,插入时候取表中最大 +1 ,感觉这方法不太好,
     有没有什么其他好的方法

解决方案 »

  1.   

    1.消息ID作为主键,并设置为自动增长,这种方法在什么情况下都不需要考虑主键重复的问题
    2.根据用户ID去最大值,select max(消息ID)+1 from table where 用户ID='',这种方法可能会发生主键重复的情况。
      

  2.   

    情况就是这样的,例如编辑好一条消息,然后选择 发送的用户 例如用户id是,1,2,3,4,5
     然后提交,在提交的时候要往消息表 和消息发送表 写数据,其中消息发送表结构是userid,msgid,
       但是在保存的时候因为消息id还没有产生出来,那么  消息发送表 中的msgid怎么确定
      

  3.   

    1. 将向两个表插入数据的 insert 操作放到一个事务中。否则可能造成两张表数据不一致。
    2. 向消息表中插数据时使用 Statement.executeUpdate("insert into ...", Statement.RETURN_GENERATED_KEYS); 根据返回值判断插入操作是否成功,如果成功,可以使用 Statement.getGeneratedKeys(); 获取包含有自动生成的字段值的 ResultSet。
    3. 使用 2 中获得的自动生成的 id 向消息发送用户表插入数据。