mysql jdbc 如何获取id_如何在JDBC中获取插入ID?

如果它是自动生成的密钥,则可以使用Statement#getGeneratedKeys()为了这个。你需要用同样的方式来称呼它Statement作为被用于INSERT..你先需要若要创建语句,请使用Statement.RETURN_GENERATED_KEYS通知JDBC驱动程序返回密钥。

下面是一个基本的例子:public void create(User user) throws SQLException {

try (

Connection connection = dataSource.getConnection();

PreparedStatement statement = connection.prepareStatement(SQL_INSERT,

Statement.RETURN_GENERATED_KEYS);

) {

statement.setString(1, user.getName());

statement.setString(2, user.getPassword());

statement.setString(3, user.getEmail());

// ...

int affectedRows = statement.executeUpdate();

if (affectedRows == 0) {

throw new SQLException("Creating user failed, no rows affected.");

}

try (ResultSet generatedKeys = statement.getGeneratedKeys()) {

if (generatedKeys.next()) {

user.setId(generatedKeys.getLong(1));

}

else {

throw new SQLException("Creating user failed, no ID obtained.");

}

}

}}

请注意,您依赖于JDBC驱动程序来确定它是否工作。目前,大多数最后的版本都可以工作,但如果我是正确的,Oracle JDBC驱动程序在这方面仍然有些麻烦。MySQL和DB2已经支持它很久了。PostgreSQL不久前开始支持它。我不能评论MSSQL,因为我从未使用过它。

对于Oracle,可以调用CallableStatement带着RETURNING条款或aSELECT CURRVAL(sequencename)(或执行此操作的任何特定于DB的语法)INSERT在同一事务中获取最后生成的密钥。另见这个答案.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值