我查看了几个使用java通过insert检索id的链接,我想我会使用RETURNING子句。
我的代码:
Connection c = DriverManager.getConnection("jdbc:postgresql://localhost:5432/testdb?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory", "postgres","root");
String sql = "INSERT INTO main (nom_fichier, adate, mdate, cdate, size, chunknumber)"
+ " VALUES ('test',450,450,450,450,5)"
+ " Returning id"
+ ";";
Statement stmt = c.createStatement();
int rowNumber = stmt.executeUpdate(sql);
但我有个错误:
Exception in thread "main" org.postgresql.util.PSQLException: a result was returned when none was expected.
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:339)
at fr.infotel.postgre.TestPostgre.main(TestPostgre.java:25)
我还尝试使用
Statement.RETURN_GENERATED_KEYS
(withouth Returning子句)但没有成功(结果集中没有任何结果)。第一个问题:我想让返回语句正常工作,因为我的请求在psql中正常工作
第二个问题:如果第一个不可能的话,我怎么能得到同样的结果
我正在使用postgres9.3和postgres9.3.jdbc3 jar。
谢谢你的帮助。
最佳答案
使用ResultSet
对象而不是rowNumber
ResultSet resultSet = stmt.executeQuery(sql);
您的查询结果现在是
resultSet
变量。