[java-jdbc]Resultset en Statement vraag

Pagina: 1
Acties:

  • gill
  • Registratie: Januari 2002
  • Laatst online: 26-12-2025

gill

Love my lindsey...

Topicstarter
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
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


  • PreviousAccountDevNull
  • Registratie: November 2000
  • Laatst online: 08-11-2025
antwoord op de vragen:

1) moet je er geen commit omheen zetten? (bij Oracle namelijk wel, maar of dit bij access ook moet weet ik niet)

2) Typisch zal je zoiets in de database zelf (met een procedure) willen oplossen. Dit wordt bij Access wat lastiger dus is jouw Vector methode het meest handig (plus dat je weet waar je bent gebleven als er iets misgaat).

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Kan je bij de database cascade delete niet aanzetten? (Kan met sybase in ieder geval wel).

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Alarmnummer schreef op 28 september 2002 @ 10:59:
Kan je bij de database cascade delete niet aanzetten? (Kan met sybase in ieder geval wel).
Ja hoor Alarmnummer, dat wil. In Access, ERD schermpje, rechterklik op de relatie. Dan hoef je alleen het master record maar te verwijderen, alle gerelateerde records gaan dan ook pleite.

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Of, je kan een batched statement gebruiken. ipv elk statement uit te voeren, voeg je het toe aan een batch en execute je ineens.

http://java.sun.com/j2se/...ddBatch(java.lang.String)

  • gill
  • Registratie: Januari 2002
  • Laatst online: 26-12-2025

gill

Love my lindsey...

Topicstarter
Hmm, heb het eerste al even getest ivm met de commit. Als ik dus con.commit(); doe, wordt het ook niet toegevoegd, ik heb even gekeken, en autocommit staat op true, dus dat kan het niet zijn. Het lijkt nochtans alsof het niet wordt doorgegeven, want :
Java:
1
int aantalUpdate = state.executeUpdate(sqlInsert);

geeft "1" terug, dus er wordt wel degelijk toegevoegd :(
Het andere ga ik straks proberen.
Iemand nog andere hints?

Visit my new Blog!
www.Snowball.be


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

heb je die db in access ook dicht gegooid terwijl je aan het updaten was?

  • gill
  • Registratie: Januari 2002
  • Laatst online: 26-12-2025

gill

Love my lindsey...

Topicstarter
Probleem opgelost!
Oplossing: access heeft standaard autocommit aan, deze disable je beter in combinatie met Jdbc. Echter, disablen hiervan moet als eerste gebeuren, vlak na het openen van de connection.

En ander probleem: ook opgelost: werkt inderdaad gewoon door dit aan te geven in Access.

Thanks guys, you realy helped me out!! _/-\o_ _/-\o_

Visit my new Blog!
www.Snowball.be

Pagina: 1