我需要在某些表中插入消息行和代码,这两个表之间存在多对多关系。因此,我制作了两个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");
}