MYSQL将auto_incremented id用于多对多关系

时间:2019-03-04 22:17:24

标签: java mysql jdbc auto-increment

我需要在某些表中插入消息行和代码,这两个表之间存在多对多关系。因此,我制作了两个ID的链接表。如果有人拥有钥匙,那应该不成问题。

我使用retourCode的代码作为键。但是对于消息行,没有提供任何标识符或代码,它只是xml元素标记的名称。

现在,有人告诉我可以在链接表中使用插入行的自动递增ID来使用,但是我不知道如何在Java中访问它。进行了一些谷歌搜索,将我带到了LAST_INSERT_ID,但没有运气。

很抱歉,如果这是重复的操作,但找不到符合我需要的特定内容。

所以我有这张桌子:

-- auto-generated definition
create table message_rows
(
  id int auto_increment
    primary key,
  name varchar(255) null
);

此表:

-- auto-generated definition
create table retour_codes
(
  code      int default 0 not null
    primary key,
  meaning text          null
);

和一个用于维护两者之间多对多关系的表:

-- auto-generated definition
create table messageRows_retourCodes
(
  message_row_id int null,
  retour_code   int null,
  constraint messageRules_retourCodes_message_rows_id_fk
    foreign key (message_row) references message_rows (id)
      on update cascade,
  constraint messageRules_retourCodes_retour_codes_code_fk
    foreign key (retour_code) references retour_codes (code)
      on update cascade
);

但是我不知道如何将自动生成的message_row的ID插入到第三张表中。

我有这个小代码,但是只在所有message_row_id的内容中放入了空值:

PreparedStatement br  = c.prepareStatement("INSERT INTO message_rows VALUES (null,?)");
PreparedStatement brk = c.prepareStatement("INSERT INTO messageRows_retourCodec VALUES (LAST_INSERT_ID(message_rows),?)");

String[] rowNames = {
       MessageParser.Header.class.getSimpleName(),
       MessageParser.Client.class.getSimpleName(),
       MessageParser.Decision.class.getSimpleName(),
       MessageParser.AssignedProduct.class.getSimpleName(),
};

   for (String row : rowNames) {
        br.setString(1, row);
        br.execute();
        for (Integer code : message.row.RetourCodes.RetourCode) {
               brk.setInt(1, code);
               brk.execute();
        }
        logger.debug("Added new message row");
    }

0 个答案:

没有答案