如何从Java中的多行PreparedStatement中检索所有生成的键?

时间:2017-08-18 09:36:06

标签: java prepared-statement

假设以下SQL语句:

INSERT INTO MATERIAL (ID, CODE, NAME) VALUES
(NULL, 'firstCode', 'firstName'),
(NULL, 'secondCode', 'secondName');

使用以下代码,其中PreparedStatement实例ps表示上面的SQL语句。并且已使用选项PreparedStatement获取new String[]{"ID"},以指定生成的密钥的列名称:

try {
    final int affectedRows = ps.executeUpdate();
    assertEquals("failed to insert all entries", "2", String.valueOf(affectedRows));
    final ResultSet generatedKeys = ps.getGeneratedKeys();
    while (generatedKeys.next()) {
      System.out.println(generatedKeys.getInt(1));
    }
} catch (SQLException e) {
    // some catch block
}

问题是只会检索第二行的ID。您是否有建议如何检索所有生成的密钥?

编辑:

这是表格的定义。

CREATE TABLE IF NOT EXISTS "MATERIAL" (
  "ID" INT NOT NULL AUTO_INCREMENT,
  "IDMATERIAL" VARCHAR(5) NOT NULL,
  "NAME"       VARCHAR(100) NOT NULL
);

1 个答案:

答案 0 :(得分:-1)

试试这个,

PreparedStatement ps = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)
ResultSet rs = preparedStatement.getGeneratedKeys();

while(rs.next())
{
    System.out.println(rs.getLong(1));
}