【问题标题】:PSQLException: This ResultSet is closed.PSQLException:此 ResultSet 已关闭。
【发布时间】:2018-09-17 18:04:51
【问题描述】:

我遇到了这个问题,我无法以相同的方法执行 executeQuery 和 executeUpdate,它给了我“PSQLException:此 ResultSet 已关闭”。 我试图创建另一个语句和其他 ResultSet 但没有成功。我对您如何帮助我有任何想法,我将不胜感激。谢谢

Statement stmt = pc.getStatement();
try
{
    ResultSet rs = stmt.executeQuery("select * from artigos where 
        artigoc="+s);

    while (rs.next())
    {
        int stock = rs.getInt("stock");

        stmt.executeUpdate("update artigos set stock="+newStock+","
                + "vendidos="+newVendidos+" where artigoc="+s);
    }
    rs.close(); // muito importante depois da consulta!
} catch (Exception e) {
    e.printStackTrace();
    System.err.println("Problems retrieving data from db...");
}

【问题讨论】:

  • 在异常相关的问题中,如果您发布堆栈跟踪会有所帮助
  • 仅供参考:您应该在StatementResultSet 上都使用try-with-resources
  • @Andreas 我已经做到了
  • @FilipeCarvalho 如果您已经这样做了,为什么问题中的代码没有这样做?我认为您将常规 try 声明与 try-with-resources 声明混淆了。
  • 另外,不要使用字符串连接将值插入到 SQL 语句中。使用带有参数标记的PreparedStatement (?)。

标签: java postgresql jdbc resultset


【解决方案1】:

Statement 的 javadoc 说:

Statement 接口中的所有执行方法都会隐式关闭语句的当前ResultSet 对象(如果存在打开的对象)。

使用不同的Statement 对象来执行更新。

【讨论】:

    猜你喜欢
    • 2018-08-16
    • 2015-04-09
    • 2019-04-05
    • 1970-01-01
    • 2015-04-25
    • 2020-03-31
    • 2018-09-23
    • 2021-01-18
    相关资源
    最近更新 更多