Ik heb een getAll methode die een iterator teruggeeft om alle rijen in een tabel te doorlopen:
ForumIterator ziet er zo uit:
Zoals je ziet roep ik de close methode van Connection aan voordat ik de Iterator return. Dit is een PooledConnection, zodat ie hierna weer hergebruikt kan worden.
Tot nu toe werkt dit goed, maar dat kan natuurlijk toeval zijn.
Mijn vraag is dus: is het veilig om een Connection opnieuw te gebruiken terwijl de ResultSet die ermee opgehaald is nog in gebruik is?
Java:
1
2
3
4
5
6
7
8
| public Iterator getAll() throws SQLException { Connection connection = m_db.getConnection(); // haalt een Connection uit de pool. PreparedStatement stmt = connection.prepareStatement("SELECT * FROM forumlist"); ResultSet rs = stmt.executeQuery(); connection.close(); // zet em terug in de pool. return new ForumIterator(rs); } |
ForumIterator ziet er zo uit:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| private class ForumIterator implements Iterator { private ResultSet m_rs; public ForumIterator(ResultSet p_rs) { m_rs = p_rs; } public boolean hasNext() { try { return ! m_rs.isLast(); } catch (SQLException e) { return false; } } public Object next() { try { m_rs.next(); return getForumImpl(m_rs); // maakt een Forum-object van de huidige rij. } catch (SQLException e) { return null; } } public void remove() { throw new UnsupportedOperationException(); } } |
Zoals je ziet roep ik de close methode van Connection aan voordat ik de Iterator return. Dit is een PooledConnection, zodat ie hierna weer hergebruikt kan worden.
Tot nu toe werkt dit goed, maar dat kan natuurlijk toeval zijn.
Mijn vraag is dus: is het veilig om een Connection opnieuw te gebruiken terwijl de ResultSet die ermee opgehaald is nog in gebruik is?