很多时候,当插入一条记录后,希望马上获得插入的主键id,
不少获得这个id的方法是 select max(id) from tablename;
为了获得这个id需要多执行一次sql语句。
PostgreSQL提供了RETURNING语句在插入后立刻获得这个id,具体方法如下:
1
|
INSERT
INTO
test(
name
)
values
(
'name'
) RETURNING id;
|
1
2
3
4
5
6
7
8
9
|
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);
}
|
1
2
3
|
select max(id)方式:
72
秒
RETURNING 方式:
47
秒
RETURNING方式的性能是select max(id)方式的
1.5
倍
|
1
|
conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
|