java对象insert_JAVA中使用PostgreSQL的RETURNING语句来实现插入时快速获取insert id

很多时候,当插入一条记录后,希望马上获得插入的主键id,

不少获得这个id的方法是 select max(id) from tablename;

为了获得这个id需要多执行一次sql语句。

PostgreSQL提供了RETURNING语句在插入后立刻获得这个id,具体方法如下:

INSERT INTO test(name) values('name') RETURNING id;

使用JDBC调用方法

String sql = "INSERT INTO test(name) VALUES (?)";

PreparedStatement pstmt = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);

pstmt.setString(1, "name");

pstmt.executeUpdate();

ResultSet generatedKeys = pstmt.getGeneratedKeys();

if (generatedKeys.next()) {

long id = generatedKeys.getLong(1);

//logger.info("insert id :" + id);

}

使用10万条数据来测试

select max(id) 和 RETURNING 方式,测试结果如下:

select max(id)方式:72秒

RETURNING 方式:47秒

RETURNING方式的性能是select max(id)方式的1.5倍

其他数据库Derby, H2, MySQL, SQL Server也支持

conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS); 方式来提高插入后获取插入id的性能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值