为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法从准备好的语句中检索自动增量ID

有没有办法从准备好的语句中检索自动增量ID

紫衣仙女 2019-12-25 15:54:15
使用带有预准备语句的Java查询时,是否有一种方法可以从数据库查询中检索自动生成的键。例如,我知道AutoGeneratedKeys可以按以下方式工作。stmt = conn.createStatement();stmt.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);if(returnLastInsertId) {    ResultSet rs = stmt.getGeneratedKeys();    rs.next();    auto_id = rs.getInt(1);} 然而。如果我想插入一个准备好的语句该怎么办。String sql = "INSERT INTO table (column1, column2) values(?, ?)";stmt = conn.prepareStatement(sql);//this is an errorstmt.executeUpdate(Statement.RETURN_GENERATED_KEYS);if(returnLastInsertId) {    //this is an error since the above is an error    ResultSet rs = stmt.getGeneratedKeys();    rs.next();    auto_id = rs.getInt(1);} 有没有办法做到这一点,我不知道。从javadoc看来,PreparedStatements无法返回自动生成的ID。
查看完整描述

3 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

是。看这里。第7.1.9节。将您的代码更改为:


String sql = "INSERT INTO table (column1, column2) values(?, ?)";

stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);



stmt.executeUpdate();

if(returnLastInsertId) {

   ResultSet rs = stmt.getGeneratedKeys();

    rs.next();

   auto_id = rs.getInt(1);

}


查看完整回答
反对 回复 2019-12-25
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

有两种方法,似乎不同的jdbc驱动程序处理的事情有些不同,或者在某些情况下根本没有差别(有些只会提供自动生成的主键,而不会给您其他列),但是基本形式是


stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); 

或使用以下形式:


String autogenColumns[] = {"column1","column2"};

stmt = conn.prepareStatement(sql, autogenColumns)


查看完整回答
反对 回复 2019-12-25
  • 3 回答
  • 0 关注
  • 490 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信