【发布时间】:2010-12-26 23:20:58
【问题描述】:
看来ResultSet在我关闭Connection时会自动关闭。
但是我想把ResultSet退回去用别的方法,然后不知道在哪里关闭Connection和PreparedStatement。
public ResultSet executeQuery(String sql, String[] getValue)
{
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try
{
conn = getConn();
pstmt = conn.prepareStatement(sql);
if (getValue != null)
{
for (int i = 0; i < getValue.length; i++)
{
pstmt.setString(i + 1, getValue[i]);
}
}
rs = pstmt.executeQuery();
} catch (Exception e)
{
e.printStackTrace();
closeAll(conn, pstmt, rs);
}
return rs;
}
我已将closeAll(conn, pstmt, null); 移动到 catch 块中,因为我发现如果我将它放入 finally 块中,我将在它返回之前立即丢失我的 rs。
现在当我想关闭rs 时,我无法关闭conn 和pstmt。有什么解决办法吗?
【问题讨论】:
-
您是否尝试流式传输结果集,即避免简单地将所有结果读入某种集合并返回?
-
题外话,为什么每个人都使用那种大括号样式?!!!这是 Java 而不是 C#
-
谢谢你们所有的热心人!中国快到早上了,但我被你们和你们对睡眠的精彩回答所感动。这是我在 Stackoverflow.com 上的第一个问题。非常感谢你们的帮助。我将成为这里的常客!
-
@Oscar 这一定是 Jon Skeet 的错。我恨他:)
标签: java jdbc connection resultset