Java 获取事务中自动递增字段的值

Java 获取事务中自动递增字段的值,java,jdbc,h2db,Java,Jdbc,H2db,我正在使用H2DB作为一个小提示表数据库。我正在使用主键ID的anj自动递增字段向表中插入多条记录。对于每条记录,我希望在插入之后,即提交之前,知道ID字段的值。如何获得该值?简而言之: 使用语句。在准备insert语句时,返回\u生成的\u键作为第二个参数 使用.getGeneratedKeys() 从ResultSet 这在使用事务时也应该起作用 以下示例演示了这一点: try { // register driver Class.forName("org.h2.Driv

我正在使用H2DB作为一个小提示表数据库。我正在使用主键ID的anj自动递增字段向表中插入多条记录。对于每条记录,我希望在插入之后,即提交之前,知道ID字段的值。如何获得该值?

简而言之:

  • 使用
    语句。在准备insert语句时,返回\u生成的\u键作为第二个参数
  • 使用
    .getGeneratedKeys()
  • ResultSet
这在使用事务时也应该起作用

以下示例演示了这一点:

try {
    // register driver
    Class.forName("org.h2.Driver");
    // open connection, in-memory database
    Connection conn = DriverManager.getConnection("jdbc:h2:mem:");
    conn.setAutoCommit(false);
    // create table
    PreparedStatement createSample = conn.prepareStatement("CREATE TABLE sample (id int not null auto_increment, txt varchar(128))");
    createSample.executeUpdate();
    createSample.close();
    // prepare insert statement
    PreparedStatement insertStatement = conn.prepareStatement("INSERT INTO sample (txt) VALUES (?)", Statement.RETURN_GENERATED_KEYS);
    // dummy list with texts
    List<String> dummyTexts = Arrays.asList("Entry A", "Entry B", "Entry C", "Entry D", "Entry E");
    // insert data
    for (String dummyText : dummyTexts) {
        insertStatement.setString(1, dummyText);
        insertStatement.executeUpdate();
        // get generated key
        ResultSet generatedKeys = insertStatement.getGeneratedKeys();
        if ((generatedKeys != null) && (generatedKeys.next())) {
            int generatedKey = generatedKeys.getInt(1);
            System.out.println("generated key " + generatedKey + " for entry '" + dummyText + "'");
        }
    }
    // commit
    conn.commit();
    insertStatement.close();
    // select data
    PreparedStatement selection = conn.prepareStatement("SELECT id, txt FROM sample");
    ResultSet selectionResult = selection.executeQuery();
    while (selectionResult.next()) {
        System.out.println("id: " + selectionResult.getInt(1) + ", txt: '" + selectionResult.getString(2) + "'");
    }
    selectionResult.close();
    selection.close();
    // close connection
    conn.close();
} catch (Exception ex) {
    ex.printStackTrace();
}
试试看{
//寄存器驱动程序
Class.forName(“org.h2.Driver”);
//打开连接,内存中数据库
连接conn=DriverManager.getConnection(“jdbc:h2:mem:”);
连接设置自动提交(错误);
//创建表
PreparedStatement createSample=conn.prepareStatement(“创建表样本(id int not null auto_increment,txt varchar(128))”;
createSample.executeUpdate();
createSample.close();
//准备插入语句
PreparedStatement insertStatement=conn.prepareStatement(“插入到样本(txt)值(?)”,Statement.RETURN\u生成的\u键);
//带文本的虚拟列表
List dummyTexts=Arrays.asList(“条目A”、“条目B”、“条目C”、“条目D”、“条目E”);
//插入数据
用于(字符串dummyText:dummyText){
insertStatement.setString(1,dummyText);
insertStatement.executeUpdate();
//获取生成的密钥
ResultSet generatedKeys=insertStatement.getGeneratedKeys();
if((generatedKeys!=null)&&(generatedKeys.next()){
int generatedKey=generatedKeys.getInt(1);
System.out.println(“生成键”+generatedKey+“用于条目””+dummyText+“”);
}
}
//承诺
conn.commit();
insertStatement.close();
//选择数据
PreparedStatement selection=conn.prepareStatement(“从样本中选择id,txt”);
结果集selectionResult=selection.executeQuery();
while(selectionResult.next()){
System.out.println(“id:+selectionResult.getInt(1)+”,txt:“+selectionResult.getString(2)+””;
}
selectionResult.close();
selection.close();
//密切联系
康涅狄格州关闭();
}捕获(例外情况除外){
例如printStackTrace();
}