Remover boilerplate do código db

Parece que toda vez que eu quero realizar uma consulta do banco de dados, eu tenho que escrever o seguinte:

Connection conn = null;
Statement stmt = null;
ResultSet rset = null;

try {
    conn = dataSource.getConnection();
    stmt = conn.prepareStatement(sql);
    // ...set stmt params
    rset = stmt.executeQuery();
    while(rset.next()) {
        // Do something interesting
    }
} finally {
    try { if (rset != null) rset.close(); } catch(SQLException e) { }
    try { if (stmt != null) stmt.close(); } catch(SQLException e) { }
    try { if (conn != null) conn.close(); } catch(SQLException e) { }
}

Esta é realmente a melhor maneira de fazer isso? Existe uma maneira de reduzir pelo menos parte da confusão?

Editado: como alguns dos comentários apontaram, este código não demorou muitoo suficiente.

questionAnswers(5)

yourAnswerToTheQuestion