返回子句失败(postgres 9.3,jdbc)

3

我看了几个用Java进行插入并检索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(没有返回语句)但没有成功(结果集为空)。
第一个问题:我想让RETURNING语句起作用,因为我的请求在psql中有效。
第二个问题:如果第一个问题不可行,我该如何获得相同的结果?
我正在使用postgres 9.3和postgres9.3.jdbc3 jar。
感谢您的帮助。

你能使用 ResultSet 对象吗?我认为 ResultSet 应该是可以的,试试这个。 - Ataur Rahman Munna
好的,那很简单...自从我遇到这个问题已经过去3个小时了... 谢谢@AtaurRahmanMunna - Whitefret
1个回答

3

使用 ResultSet 对象代替 rowNumber

ResultSet resultSet = stmt.executeQuery(sql);

您的查询结果现在存储在 resultSet 变量中。


这应该怎么工作?executeUpdate方法总是返回一个整数:https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#executeUpdate(java.lang.String) - Ethan Leroy
@EthanLeroy,我的错。不知怎么搞的,executeQuery返回ResultSet对象。我已经更新了我的答案。感谢你的指正。 - Ataur Rahman Munna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接