Ik heb 2 vraagjes ivm Jdbc.
1. Ik gebruik een Access DB waarmee mijn Jdbc applicatie moet werken. Dus maak ik een Connection en en Statement object voor deze DB. Wanneeer ik nu een query uitvoer, bv
dan zie ik deze verandering niet, totdat de Connection en de Statement werden geclosed (door close()). Is dit normaal, of kan ik dit vermijden, want voor elke method een open en een close moeten schrijven is niet zo handig.
2. Ik had tevens geprobeerd om een recursieve verwijdering van records te doen: ik heb bv een tabel Personeel en een tabel Werkopdrachten. Van alle personeelsleden houdt ik dus werkopdrachten bij; in deze tabel wordt dus Personeelnummer als alternatieve sleutel gebruikt. Dus, had ik gedacht, wanneer ik een personeelnummer verwijder in mijn personeeltabel, ga ik een method VerwijderReeks maken:
Nu, dit lukt niet, omdat de resultset (rsw) na het uitvoeren van 1 lus al geclosed is, omdat in de opgeroepen method een andere Statement wordt uitgevoerd.
Bestaat er een andere manier om dit te omzeilen, bv de Resultset tijdelijk wegschrijven? Op de tutorial van Sun staat hier nergens wat over, enkel Resultset is daar behandeld.
(Voorlopig heb ik het opgelost met alle pnr's weg te schrijven in een Vector, en daarna de andere method meerdere malen op te roepen, maar ik hoopte dat er een elegantere manier bestond...)
1. Ik gebruik een Access DB waarmee mijn Jdbc applicatie moet werken. Dus maak ik een Connection en en Statement object voor deze DB. Wanneeer ik nu een query uitvoer, bv
Java:
1
2
| String sqlDelete = "Delete from activiteit where activiteitnr=" + anr; int mod = state.executeUpdate(sqlDelete); |
dan zie ik deze verandering niet, totdat de Connection en de Statement werden geclosed (door close()). Is dit normaal, of kan ik dit vermijden, want voor elke method een open en een close moeten schrijven is niet zo handig.
2. Ik had tevens geprobeerd om een recursieve verwijdering van records te doen: ik heb bv een tabel Personeel en een tabel Werkopdrachten. Van alle personeelsleden houdt ik dus werkopdrachten bij; in deze tabel wordt dus Personeelnummer als alternatieve sleutel gebruikt. Dus, had ik gedacht, wanneer ik een personeelnummer verwijder in mijn personeeltabel, ga ik een method VerwijderReeks maken:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
| ... try { String sqlDeleteAct = "Select * from werkopdracht where personeelnr=" + pnr; ResultSet rsw = state.executeQuery(sqlDeleteAct); while(rsw.next()) { verwijderWerkopdracht(rs.getInt(1); // >>>hier roep ik de method op om 1 te verwijderen, adhv nummer uit tabel! }//while }//for }//try ... |
Nu, dit lukt niet, omdat de resultset (rsw) na het uitvoeren van 1 lus al geclosed is, omdat in de opgeroepen method een andere Statement wordt uitgevoerd.
Bestaat er een andere manier om dit te omzeilen, bv de Resultset tijdelijk wegschrijven? Op de tutorial van Sun staat hier nergens wat over, enkel Resultset is daar behandeld.
(Voorlopig heb ik het opgelost met alle pnr's weg te schrijven in een Vector, en daarna de andere method meerdere malen op te roepen, maar ik hoopte dat er een elegantere manier bestond...)
Visit my new Blog!
www.Snowball.be