[java]DBConnectie?

Pagina: 1
Acties:

  • urkelman
  • Registratie: December 2003
  • Laatst online: 29-04 08:49
Ik heb een vraagje, telkens als ik mijn applicatie compile maakt hij heel wat keren verbinding met de db om alle gegevens op te halen die ik nodig heb voor mijn applicatie. ik weet dit omdat ik voor elke connectie een System.out.println gemaakt heb!
Ik vraag me af of het niet zo kan dat als je pas een knop indrukt dat hij dan de gegevens ophaald.
mijn db class 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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public class Database {

   public Connection connection;
   Statement statement;
    
    // Create a connection to the database
    String serverName = "127.0.0.1";//
    String mydatabase = "kaleidoscope";
    String url = "jdbc:mysql://" + serverName +  "/" + mydatabase; // a JDBC url
    String username = "test";
    String password = "test";//

    /**
     * Constructor
     */
    public Database() {
        
        try {
        // Load the JDBC driver
        String driverName = "org.gjt.mm.mysql.Driver"; // MySQL MM JDBC driver
        Class.forName(driverName);//.newInstance();
        
        } catch (ClassNotFoundException classNotFound) {
        // Could not find the database driver
        JOptionPane.showMessageDialog( null, classNotFound.getMessage(),
                    "Driver Not Found", JOptionPane.ERROR_MESSAGE );
        }  catch (Exception exception) {
        // handle the error
        JOptionPane.showMessageDialog( null, exception.getMessage(),
                "Database Error", JOptionPane.ERROR_MESSAGE);
        }      
  }
      
    
     public void openCon(){
            try{
           
           connection = DriverManager.getConnection(url, username, password);
           Statement statement = connection.createStatement();
           System.out.println("Verbonden met de database");
            }
            catch (SQLException sqlException) {
                // Could not connect to the database
                JOptionPane.showMessageDialog( null, sqlException.getMessage(),
                        "Database Error", JOptionPane.ERROR_MESSAGE);
            }
        }
        
     public void sluitCon(){
            try{
                //statement.close();
                connection.close();
                System.out.println("Verbinding met de database verbroken");
            } catch (SQLException sqlException) {
                // Could not connect to the database
                JOptionPane.showMessageDialog( null, sqlException.getMessage(),
                        "Database Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    
}



ik zie heel vaak in voorbeelden dat er een interface wordt gemaakt, maar wat houd dat dan in??

wat nog een probleem is, is dat als ik gegevens heb toegevoegd ik eerst weer het programma moet afsluiten wil ik diezelfde gegevens kunnen gebruiken verderop in mijn app.

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

Nick_S

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

Ten eerste, hoop ik, dat je bedoelde, dat je elke keer bij het uitvoeren van je programma er database connecties worden gemaakt en niet tijdens het compileren... (Als het wel bij het compileren gebeurt, wil ik graag weten, welke compiler je code uitvoert tijdens het compileren... ;) )

En waarschijnlijk maak je een connectie met je database omdat je je functie openCon() aanroept. Waar je dat doet en wat je met een hoop connecties moet, weet ik niet. Je zou daar ook een connectie voor kunnen gebruiken.

En als je wilt weten, wat interfaces zijn, zal google, sun of een van de vele andere sites op het internet je hier vast meer informatie over kunnen geven.
Kijk hier maar eens naar: http://java.sun.com/docs/...a/concepts/interface.html Java tutorial van Sun.

Oei! Ik zie nog een hele groffe fout in je code. Kijk hier eens naar:

code:
1
Statement statement;


En dan even verderop:
code:
1
Statement statement = connection.createStatement();


Denk je dat je buiten je functie openCon() nu een statement hebt?

[ Voor 24% gewijzigd door Nick_S op 10-06-2005 14:51 ]

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


  • whoami
  • Registratie: December 2000
  • Laatst online: 06-05 15:36
:?
Ik hoop dat jij dan eigenlijk weet wat je aan het doen bent ?
Je hebt een DB class, dus ik ga ervan uit dat je die class zelf geschreven hebt ?
Dan weet je toch ook wel dat, iedere keer dat je openConn aanroept, er een connectie met de DB gebeurd ?

https://fgheysels.github.io/


  • urkelman
  • Registratie: December 2003
  • Laatst online: 29-04 08:49
ja dat snap ik ook wel!!
mijn app bestaat uit allemaal panels
als ik hem run dan haal hij al al die gegevens op voor die panels en ja daar staat natuurlijk openCon() in!

die grove fout is verbeterd: ;)

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

Nick_S

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

Maak dan die Connection private en schrijf een functie getConnection()
Ff snel code:
code:
1
2
3
4
5
6
public Connection getConnection() {
            if (connection == null) {
                        openCon();
            }
            return connection;
}


Nee, hoor. Groffe vout staat er nog in! :P

En nog een gevonden! Roep eens sluitCon() aan voordat je openCon() aanroept. Wedden dat je programma op z'n plaat gaat met een NullPointerExcepten. :P

[ Voor 31% gewijzigd door Nick_S op 10-06-2005 15:00 ]

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


Verwijderd

Alles private maken behalve de main...hopla

Laat die open en sluit conn ook ff een status returnen (int ofzo) om te controleren of het goed gaat...

Verwijderd

Nick_S schreef op vrijdag 10 juni 2005 @ 14:58:
code:
1
2
3
4
5
6
public Connection getConnection() {
            if (connection == null) {
                        openCon();
            }
            return connection;
}
Wedden dat je programma op z'n plaat gaat met een NullPointerExcepten. :P
Zeker weten met bovenstaande code..

///zo edit nummer 350:
ja in de context van de TS levert het geen nullpointer, maar normaliter wel natuurlijk. Overigens vind ik het wel een armoedige poging tot singleton.

[ Voor 201% gewijzigd door Verwijderd op 10-06-2005 15:09 ]


  • urkelman
  • Registratie: December 2003
  • Laatst online: 29-04 08:49
kijk in de JPanels wordt telkens een nieuw object gemaakt
Java:
1
Database database = new Database();

dat is zeker heel stom?? het komt wel een aantal keer voor in sommige panels 8)7

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

Nick_S

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

Verwijderd schreef op vrijdag 10 juni 2005 @ 15:01:
Alles private maken behalve de main...hopla

Laat die open en sluit conn ook ff een status returnen (int ofzo) om te controleren of het goed gaat...
Waarom zou je een return waarde willen geven? Als er geen exceptie gegooid wordt, is het goed gegaan. Daar heb je geen return waarde voor nodig.

En alles private maken behalve main? Programmeer jij altijd alles in één klasse of zo? Hoe wil je ooit object georienteerd proggen als alles private is? :?

Probeer je klassen altijd wel zo fool proof* mogelijk te maken. "Een ketting is zo sterk als zijn zwakste schakel" en dat is je programma ook.

* Maar onthoudt: If anything is foolproof, nature will provide a bigger fool. :9
Verwijderd schreef op vrijdag 10 juni 2005 @ 15:04:
[...]

Zeker weten met bovenstaande code..
Hmm, wat was hier mis aan? Ik doelde eigenlijk meer op het vergeten op null te controleren in zijn sluitCon()

[ Voor 15% gewijzigd door Nick_S op 10-06-2005 15:08 ]

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


Verwijderd

Nick_S schreef op vrijdag 10 juni 2005 @ 15:06:
[...]


Waarom zou je een return waarde willen geven? Als er geen exceptie gegooid wordt, is het goed gegaan. Daar heb je geen return waarde voor nodig.

En alles private maken behalve main? Programmeer jij altijd alles in één klasse of zo? Hoe wil je ooit object georienteerd proggen als alles private is? :?

Probeer je klassen altijd wel zo fool proof* mogelijk te maken. "Een ketting is zo sterk als zijn zwakste schakel" en dat is je programma ook.

* Maar onthoudt: If anything is foolproof, nature will provide a bigger fool. :9


[...]

Hmm, wat was hier mis aan? Ik doelde eigenlijk meer op het vergeten op null te controleren in zijn sluitCon()
En als er wel een exceptie gegooid wordt, hoe weet de moeder routine dan dat er een exceptie was?
En ik bedoelde met alles private maken, is alles wat hij public had behalve de main, wat ik zag, niet alles uit zijn class....

[ Voor 3% gewijzigd door Verwijderd op 10-06-2005 15:42 ]


Verwijderd

Verwijderd schreef op vrijdag 10 juni 2005 @ 15:31:
En als er wel een exceptie gegooid wordt, hoe weet de moeder routine dan dat er een exceptie was?
Dat weet de "moeder routine" omdat die een Exceptie op haar bord krijgt

Verwijderd

Verwijderd schreef op vrijdag 10 juni 2005 @ 15:32:
[...]

Dat weet de "moeder routine" omdat die een Exceptie op haar bord krijgt
Gooit JAVA ze zelf over naar een andere als ie al is afgevangen ofzo...zo ja dan was mijn opmerking onnodig, anders geldt ie nog steeds....

Verwijderd

Verwijderd schreef op vrijdag 10 juni 2005 @ 15:35:
Gooit JAVA ze zelf over naar een andere als ie al is afgevangen ofzo...zo ja dan was mijn opmerking onnodig, anders geldt ie nog steeds....
Nick_S bedoelde uiteraard dat je beter die excepties door kan smijten ipv een return waarde, en dan natuurlijk wel het liefst gewrapped in een eigen Exception met nuttige informatie..

Neem anders een cursusje intervisie ofzo.... :>

[ Voor 12% gewijzigd door Verwijderd op 10-06-2005 15:40 ]


Verwijderd

Verwijderd schreef op vrijdag 10 juni 2005 @ 15:39:
[...]

Nick_S bedoelde uiteraard dat je beter die excepties door kan smijten ipv een return waarde, en dan natuurlijk wel het liefst gewrapped in een eigen Exception met nuttige informatie..

Neem anders een cursusje intervisie ofzo.... :>
Ach laat ook maar, het was maar een suggestie hoor....
Dat 'ik ben beter dan jij want ik weet meer' gedoe hier begint me behoorlijk de strot uit te hangen... :(

Verwijderd

Verwijderd schreef op vrijdag 10 juni 2005 @ 15:43:
Ach laat ook maar, het was maar een suggestie hoor....
Dat ik ben beter dan jij want ik weet meer gedoe hier begint me behoorlijk de strot uit te hangen... :(
Volgens mij bedoelt niemand het lullig hoor. Jij doet een voorstel waar Nick_S het terecht niet mee eens is.

Je aanpak zou betekenen dat je voor elke methode met Excepties status codes moet verzinnen. Je wilt immers weten of je applicatie door mag gaan of moet stoppen of zelfs een nieuwe poging moet wagen. Een Exceptie levert je doorgaans die informatie al en levert je tevens een goede stackstrace die je met een enkele int verwaarloost.

Dus voordat je beroep doet op "ik ben beter dan jij" graag eerst even naar de inhoud kijken :)

Verwijderd

true of false was toch genoeg geweest, anders krijg je alsnog een lijst met excepties die je eventueel af moet handelen, maar ik ben het eens met je dat je programma zo goed is als je zwakste schakel. Het is maar waar je prio's zet.

Sorry voor mijn reactie van daarnet.... :o

  • urkelman
  • Registratie: December 2003
  • Laatst online: 29-04 08:49
hmmm goed iedereen is klaar.??? ;)

ik heb nu gewoon 1 Database database; gedeclareerd en in de constructor database = new Database(); gemaakt en alles werkt nog, en volgens mij is dit beter dan overal een new Database() te maken

  • FaceDown
  • Registratie: Juni 2003
  • Laatst online: 09-04 23:33

FaceDown

Storende factor.

Da's inderdaad goed! Ik ben toevallig een soortgelijk programma aan het schrijven; een veilingsysteem. Het is ook een app (applet) die bestaat uit meerdere panels en de applet legt een verbinding met de database. Een verschil is dat ik alle relevante code (dus server/database-verbindingen) in de applet heb staan, en de panels eigenlijk alleen voor de panels relevante code bevatten, zoals layout-zooi.
Ik maar zelfs niet alleen 1 keer een Database db aan maar ook maar 1 keer een DBConnection myCon. Die DBConnection is een eigen class van mij die een verbinding met de database legt, maar die ook een methode bevat om gegevens uit de database te lezen. Deze methode heeft dan een QueryDataSet terug. Een andere methode gebruik ik weer voor updates, deletes en inserts.

Ik maakte eerst ook de fout om steeds weer een nieuwe connection aan te maken. M'n programma werd er retetraag door. Een lijst van 10 veilingkavels ophalen en weergeven duurde wel tot 15 seconden en nu minder dan 1 sec.

Als je benieuwd bent, neem eens een kijkje op http://raisethebid.ospeldijk.nl . Registreer jezelf gerust (nep-mailadres geen probleem) en vul vanalles in, maak kavels aan etc... Er is toch niks officieels aan, en het wordt ook nog niet gebruikt. Feedback greatly appreciated trouwens. ;)

[ Voor 3% gewijzigd door FaceDown op 10-06-2005 19:46 ]

Groetjes, FaceDown.


  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
Houd er rekening mee dat je je paswoord nooit in plain-text (eigenlijk best gewoon *NIET*) mag opslaan in een applet, aangezien je dat makkelijk kan reverse-engineeren.

FaceDown: zoals jij gedaan hebt dus. Ik had het je graag gemaild, maar ik vind geen e-mail adres.

[ Voor 24% gewijzigd door dingstje op 11-06-2005 12:48 ]

If you can't beat them, try harder


Verwijderd

derk.d schreef op vrijdag 10 juni 2005 @ 15:56:
hmmm goed iedereen is klaar.??? ;)

ik heb nu gewoon 1 Database database; gedeclareerd en in de constructor database = new Database(); gemaakt en alles werkt nog, en volgens mij is dit beter dan overal een new Database() te maken
Als je er echt maar 1 instantie wilt kun je er ook een singleton van maken:
Java:
1
2
3
4
5
6
7
public class Singleton {
  private static Singleton singleton = new Singleton();
  private Singleton(){}
  public static Singleton instance(){
    return singleton;
  }
}

[ Voor 3% gewijzigd door Verwijderd op 11-06-2005 13:30 ]


  • momania
  • Registratie: Mei 2000
  • Laatst online: 06-05 17:20

momania

iPhone 30! Bam!

Verwijderd schreef op zaterdag 11 juni 2005 @ 13:29:
[...]

Als je er echt maar 1 instantie wilt kun je er ook een singleton van maken:
Java:
1
2
3
4
5
6
7
public class Singleton {
  private static Singleton singleton = new Singleton();
  private Singleton(){}
  public static Singleton instance(){
    return singleton;
  }
}
Zou ik alleen nog even een synchronized by de instance() method gooien ;)

Neem je whisky mee, is het te weinig... *zucht*


  • FaceDown
  • Registratie: Juni 2003
  • Laatst online: 09-04 23:33

FaceDown

Storende factor.

dingstje schreef op zaterdag 11 juni 2005 @ 12:48:
Houd er rekening mee dat je je paswoord nooit in plain-text (eigenlijk best gewoon *NIET*) mag opslaan in een applet, aangezien je dat makkelijk kan reverse-engineeren.

FaceDown: zoals jij gedaan hebt dus. Ik had het je graag gemaild, maar ik vind geen e-mail adres.
Hm ja gelijk heb je. Het is gelukkig maar een schoolproject. Misschien dat ik het later nog ga uitbouwen en dan zal ik daar zeker naar kijken. Bedankt in ieder geval. :)

Groetjes, FaceDown.


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 05-05 19:18
momania schreef op zaterdag 11 juni 2005 @ 14:13:
[...]

Zou ik alleen nog even een synchronized by de instance() method gooien ;)
Dan is ie nog niet threadsafe.

  • momania
  • Registratie: Mei 2000
  • Laatst online: 06-05 17:20

momania

iPhone 30! Bam!

FallenAngel666 schreef op zaterdag 11 juni 2005 @ 16:53:
[...]
Dan is ie nog niet threadsafe.
Nee, klopt... maar eigenlijk zijn singletons in een threaded omgeving natuurlijk heel vies :P

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

momania schreef op zaterdag 11 juni 2005 @ 14:13:
Zou ik alleen nog even een synchronized by de instance() method gooien ;)
want?
Dit is de enige manier om het juist threadsafe te krijgen

  • urkelman
  • Registratie: December 2003
  • Laatst online: 29-04 08:49
heeft iemand voorbeelden?? ben nog een rookie met java en heb al helemaal nooit van singleton gehoord....

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

Alarmnummer

-= Tja =-

momania schreef op zaterdag 11 juni 2005 @ 18:27:
[...]

Nee, klopt... maar eigenlijk zijn singletons in een threaded omgeving natuurlijk heel vies :P
Singletons zijn altijd vies. Maar het is niet viezer in een multithreaded omgeving. En verder is dit geen lazy singleton dus ik zie niet wat hier qua threadsafe problematiek aan fout kan gaan.

  • momania
  • Registratie: Mei 2000
  • Laatst online: 06-05 17:20

momania

iPhone 30! Bam!

Alarmnummer schreef op zondag 12 juni 2005 @ 01:46:
[...]
En verder is dit geen lazy singleton dus ik zie niet wat hier qua threadsafe problematiek aan fout kan gaan.
iid :X

had weer eens te snel geoordeeld :P

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

Nadeel van lazy-singletons is dat je altijd de methode synchronized moet maken, en dat is een killer qua performance.
Pagina: 1