Кажется, что 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
. Есть ли какое-либо решение?