Toon posts:

[Java/MS Access] Gegevens uit db 'refreshen' lukt niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goedemorgen!
Ik heb een raar probleempje.
Ik heb een Java-applicatie waarin ik een 4tal Lijsten vul met namen, dit gaat via de methode showPresenceLists(). Aan de hand van gegevens uit de database (rooster/kloktijden enz) komt de naam in de ene lijst danwel cq in de andere. Wanneer de gebruiker een naam uit een van de lijsten selecteerd verschijnt er een popup (JDialog) waarmee de gebruiker inzoemt op de exacte gegevens. Ook kan de gebruiker hierop een aantal gegevens wijzigen. De gewijzigde gegevens sla ik op in de db. Dit gaat zonder problemen. Maw, wanneer ik direct daarna de db open en de tabel bekijk zie ik het resultaat. Het popupje sluit en ik ververs automatisch de lijsten door showPresenceLists() aan te roepen.
Nu zie ik dus dat de lijsten opnieuw worden gevuld, het probleem is echter dat de applicatie niet de nieuwe db gegevens ophaalt, maar schijnbaar verder gaat met de oude gegevens.
Aan het begin van de methode showPresenceLists() roep ik de methode maakVerbinding("dblocatie") uit mijn eigen Database klasse aan.
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
    
public void maakVerbinding(String dbnaam) {
      String currentDir = System.getProperty("user.dir");
      String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
      String username = "";
      String password = "";
      String url = "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" + dbnaam;

         try
            {
            Class.forName(driver);
            }
            catch (Exception e)
                {
                System.out.println("JDBC/ODBC-stuurprogramma kan niet worden geladen.");
                return;
                }
        try
            {
              con = DriverManager.getConnection(url);
              stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            }
            catch (Exception e)
                {
                 e.printStackTrace();
                 System.err.println("Kan geen verbinding maken met de ODBC-connectie.");
                }
    }


Aan het eind van de methode showPresenceLists() roep ik de methode sluitVerbinding aan.
Java:
1
2
3
4
5
6
7
8
9
10
    public void sluitVerbinding(){
        try
            {
                stmt.close();
                con.close();
        }
        catch(Exception e){
            System.out.println( "er is geen connectie met de databse");
        }
    }


showPresenceLists() begint nu toch iedere keer met een nieuwe databaseconnectie?
Ik snap echt niet waarom hij dan niet de nieuwe gegevens verwerkt...

Hebben jullie misschien enig idee?

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 22-04 03:55

Nick_S

++?????++ Out of Cheese Error

Laat je functie eens zien, waarmee je je lijst opnieuw vult. Meestal moet je nog een Swing functie aanroepen. Revalidate oid.

Vang ook nooit Exception af, maar altijd een subklasse. Hiermee voorkom je dat je een andere exceptie afvangt, dan diegene die eigenlijk zou willen. Toon ook altijd de exception.getMessage ipv. een standaard String. Dat werkt veel makkelijker met debuggen. (Bijvoorbeeld als er inderdaad een andere exceptie gegooid werd.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Verwijderd

En waar voer je de query uit?

Verwijderd

Topicstarter
Ik drop liever niet de hele lap code.
Ik roep in de methode showPresenceLists() een aantal keer de methode maakVerbinding() aan en op het eind één keer de methode sluitVerbinding().
Ik heb het idee dat het probleem ligt aan het feit dat ik de verbinding niet sluit na iedere keer dat ik een verbinding maak en gebruik.
Dus ik heb nu ongeveer dit idee:

maakverbinding
voer query uit
gebruik resultset

maakverbinding
voer query uit
gebruik resultset

maakverbinding
voer query uit
gebruik resultset

sluitverbinding

Het rare is dus dat de eerste keer dat ik showPresenceLists aanroep alles goed gaat, maar de tweede keer de methode met dezelfde gegevens verder gaat.

Misschien een raar idee, maar maakt Java een kopie van de database als hij er een verbinding mee maakt?
Ik ga nu nog even kritisch naar de constructie van de methode kijken.
Nick_S schreef op vrijdag 14 oktober 2005 @ 12:08:
Meestal moet je nog een Swing functie aanroepen. Revalidate oid.
Ik gebrijp niet wat je hier mee bedoelt... Heeft dit met de Lists te maken? Nee toch...

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 22-04 03:55

Nick_S

++?????++ Out of Cheese Error

Probeer het eens anders op te zetten:

MaakVerbinding

createStatement
voer query uit
gebruik resultset
sluit statement

createStatement
voer query uit
gebruik resultset
sluit statement

Sluitverbinding

[ Voor 9% gewijzigd door Nick_S op 14-10-2005 14:09 . Reden: Je statements sluiten is ook wel zo netjes. ]

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • bvp
  • Registratie: Maart 2005
  • Laatst online: 16-04 19:03

bvp

Nick_S schreef op vrijdag 14 oktober 2005 @ 13:12:
Probeer het eens anders op te zetten:

MaakVerbinding

createStatement
voer query uit
gebruik resultset

createStatement
voer query uit
gebruik resultset

Sluitverbinding
Of maak in je methode maakVerbinding() een finally{} blok en roep daar je sluitVerbinding() aan...

duhh kan je geen query uitvoeren :o , bedoelde idd het bovenstaande

[ Voor 16% gewijzigd door bvp op 14-10-2005 14:07 ]


  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 22-04 03:55

Nick_S

++?????++ Out of Cheese Error

bvp schreef op vrijdag 14 oktober 2005 @ 14:04:
[...]

Of roep in je maakVerbinding() op het einde sluitVerbinding() aan...
Dat lijkt me niet handig, aangezien er pas buiten de maakVerbinding functie gebruik wordt gemaakt van het statement. Als je dan in je maakVerbinding al een sluitVerbinding aanroept, is je statement al ongeldig. Was al opgemerkt door de poster zelf.

Voor als je wat 'netter' wilt programeren, maak een Database klasse, welke je verbinding regelt. Maak daarbovenop een Businesslaag, die je om een collectie voor in je lijst kan vragen. Gebruik deze collectie om je lijst te vullen. Als je hier geinteresseerd in bent, wil ik het wel uitgebreider uitleggen.

[ Voor 4% gewijzigd door Nick_S op 14-10-2005 14:08 ]

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Verwijderd

Topicstarter
Hey Nick.
Die extra businesslaag lijkt mij interessant, kan je daar meer over uitleggen? Groeten Dave

PS ik heb je een email gestuurd.

Verwijderd

Topicstarter
Ok. Ik heb het probleem gevonden, het zat hem in het feit dat ik van de gegevens uit de database een array maakte en dat die array niet herschreven werd wanneer ik nieuwe gegevens uit de database ophaalde.

Ik leeg nu eerst de array alvorens er nieuwe dingen in te stoppen.

Bedankt voor jullie hulp, maar zoals heel vaak lag het aan iets waar je niet naar zocht... :)

  • Standeman
  • Registratie: November 2000
  • Laatst online: 22:41

Standeman

Prutser 1e klasse

Verwijderd schreef op vrijdag 14 oktober 2005 @ 14:39:
Hey Nick.
Die extra businesslaag lijkt mij interessant, kan je daar meer over uitleggen? Groeten Dave

PS ik heb je een email gestuurd.
Kijk eens naar het DAO pattern Op die manier kan je je data van je business scheiden. (zeker i.c.m. Swing/MVC)

The ships hung in the sky in much the same way that bricks don’t.

Pagina: 1