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