java 和 oracle 中的最大打开游标数超出异常

maximum open cursors exceeded exception in java and oracle

我的代码有问题: 错误:ORA-01000:超出最大打开游标。此代码从多个线程调用。 问:Oracle 游标是否不同于 JDBC 游标(结果集)?

public static void viewTable(Connection con, String TBName)
        throws SQLException {

        Statement stmt = null;
        String query =   "select *from " + TBName;

        try {
            stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(query);
            while (rs.next()) {
                String studentName = rs.getString("STD_NAME");

                System.out.println(studentName + "\t");
            }
        } catch (SQLException e ) {
            e.printStackTrace();
        } finally {
            if (stmt != null) { stmt.close(); }
        }
    }

您应该始终关闭结果集和语句。正如您所说,您的代码被许多线程访问,因此很多结果集将打开并且永远不会 已关闭。

将 ResultSet 变量从 try catch 块中取出,并在语句关闭旁边的 finally 中将其关闭。

使用try-with-resources确保语句和结果集都关闭。

    String query =   "select STD_NAME from " + TBName;
    try (Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery(query)) {
        while (rs.next()) {
            String studentName = rs.getString("STD_NAME");
            System.out.println(studentName + "\t");
        }
    } // Closes rs and stmt even with exceptions.