我有一个ResultSet方法,该方法将最终关闭连接:
public static ResultSet countdrcountcr(String vforacid) throws SQLException {
ResultSet rs = null;
Connection conn = null;
try {
conn = db.getDbConnection();
String sql = "SELECT NVL (SUM (DECODE (part_tran_type, 'D', 1, 0)), 0), "
+ " NVL (SUM (DECODE (part_tran_type, 'C', 1, 0)), 0) "
+ " FROM tbaadm.htd WHERE acid IN (SELECT acid "
+ " FROM tbaadm.gam WHERE foracid = '" + vforacid + "') "
+ " AND tran_date >= '22-NOV-2013' AND tran_date <= '30-NOV-2013' "
+ " AND pstd_flg = 'Y' AND del_flg != 'Y'";
PreparedStatement ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
return rs;
} finally {
conn.close();
}
}
但是我得到了错误:
编辑整个ErrorTrace
Exception in thread "main" java.sql.SQLException: Closed Connection: next
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:181)
at statement.Statement.main(Statement.java:34)
Java Result: 1
我在做什么不对?
您将返回一个a
ResultSet
以便将来使用,但是在使用它之后,您将关闭连接,因此由于资源已关闭,因此您无法检索数据。请注意finally
,即使您在try
或catch
代码块中返回了某些内容,也始终会调用它,
详细来说,这就是问题所在:
PreparedStatement
和ResultSet
当前资源的关联Connection
),因为正如前面的链接中所述, 始终* 至少在JVM崩溃的情况下执行finally
块,或者使用手动完成应用程序。 *System.exit
ResultSet
。由于上一步已关闭。一个可能的解决方案是您的countdrcountcr
方法和所有其他返回a的方法都ResultSet
接收Connection
as参数,因此调用它的方法将处理连接的打开和关闭。另外,请注意,static
如果您在多线程环境(例如Web应用程序)中工作,则不应使用方法来处理数据库操作。
我正在实现一个TCP堆栈,并且遇到了半关闭连接的问题。 我的实现充当服务器端。客户端建立连接,然后发送一些数据,然后发送“FIN”消息。然后,服务器确认来自客户端的数据,发送自己的一些数据,然后才关闭其一半的连接(发送“FIN”)。 问题是,客户端没有确认服务器在半封闭连接上发送的数据,也没有确认其最终的“FIN”消息。根据netstat,客户端处于FIN_WAIT2状态。在服务器不发送任何数据的
问题内容: 我正在使用以下代码从Go应用执行SET和EXPIRE。 但我开始出现错误: 使用封闭的网络连接 。我使用Gary Burd的Redigo软件包和RedisLabs。 我连接到Redis的代码是: 问题答案: 您可以使用来管理多个连接,检查空闲连接是否仍在运行,并自动获取新连接。您也可以在拨打新连接时自动执行AUTH步骤:
SQL server处于混合模式,其在本地机器中。我的连接字符串是jTDS jdbc:jtds:sqlserver://machineName:1433;databaseName=db;integratedsecurity=true 堆栈跟踪是 com.microsoft.sqlserver.jdbc.sqlserverException:用户“username”登录失败。在com.microso
void fl_polygon(int x, int y, int x1, int y1, int x2, int y2) void fl_polygon(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) Fill a 3 or 4-sided polygon. The polygon must be convex.
问题内容: 我正在实现一个小型TCP服务器。我怎么知道我的一位客户是否关门?我应该只是尝试读取或写入并检查是否为零? 问题答案: 该线程“ 的最佳方式可靠地检测TCP连接被关闭 ”,使用了“ ”(也可见于或或许多其他情况下): 为了检测超时,建议: 更新2019:tuxedo25在评论中提到: 在Go 1.7+中,零字节读取立即返回,并且永远不会返回错误。 您必须读取至少一个字节。 参见commi