我可以用execute()或executeUpdate()返回值吗?



我有一个连接到postgreSQL数据库的服务器,我想在插入后将新行的ID返回给客户端。我试过了:

int id = stmt.execute("insert into [table] values(default,0) returning id;");                         

SQL语句工作,如果我直接在数据库上工作,但不在这里,我得到这个错误:org.postgresql.util.PSQLException:当没有预期结果时返回结果。

我认为这是因为execute()和executeUpdate()不应该返回值,所以我添加了这个:

stmt.execute("insert into [table] values(default,0) returning id;");
ResultSet id = stmt.executeQuery("select last_insert_id();");

显然,该语句是mySQL,所以它不起作用,我读过CURRVAL和NEXTVAL在postgreSQL中这样做,但我没能做到这一点,我也读过它并不总是准确的。

是我遗漏了什么,还是有其他的方法?

您可以使用getGeneratedKeys()

String sql = "insert into the_table(some_column) values (?)";
PreparedStatement pstmt = connection.prepareStatement(sql, new String[]{"id"});    
pstmt.setInt(1, 0);
int numRows = pstmt.executeUpdate();
ResultSet keys = pstmt.getGeneratedKeys();
int newId = -1;
if (keys.next()) {
newId = keys.getInt(1);
}

或者你也可以使用:

PreparedStatement pstmt = connection.prepareStatement("...", PreparedStatement.RETURN_GENERATED_KEYS);

这也适用于batchedStatements(在pstmt.executeBatch()之后)或多行插入。在这种情况下,if (keys.next())必须更改为while()循环,以遍历所有生成的id

相关内容

  • 没有找到相关文章

最新更新