Toon posts:

[JAVA] Inlogsysteem met MS ACCESS

Pagina: 1
Acties:
  • 545 views

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Probleem:
Voor school moet ik een programma maken met een inlogsysteem. De gegevens bevinden zich in een database (MS ACCESS) en daar moeten ze dus worden uitgehaald. Ik zoek dus de ingevulde waarden op in de database en bewaar dan de sleutel van de gebruikersnaam en van het wachtwoord. Die 2 worden dan vergeleken of ze gelijk zijn en zoja stuurt hij een boolean true terug.

Maar nu is mijn probleem dat hij telkens een boolean false terug geef en zie echt niet wat er verkeerd is :(

Code:
Aanmelden:
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
    static public void main(String[] args) {
        Database datacon = new Database();
        boolean checkAanmeldGegevens = false;
        String gebruikersNiveau = "", gebruikersnaam = "", wachtwoord = ""; 
        
        String uitvoer = "Kies uw taal:\n1. Nederlands\n2. English\n3. Français";

        System.out.println(uitvoer);
        int keuze = scanner.nextInt();
        controle_keuze(keuze);
        
        Locale currentLocale;
        ResourceBundle messages;

        currentLocale = new Locale(taal, land);
        messages = ResourceBundle.getBundle("MessagesBundle",currentLocale);

        System.out.println(messages.getString("inloggen_welkom"));
        
        do {
        System.out.println(messages.getString("inloggen_gebruikersnaam"));
        gebruikersnaam = scanner.next();
        System.out.println(messages.getString("inloggen_wachtwoord"));
        wachtwoord = scanner.next();
        
        checkAanmeldGegevens = datacon.database_start_aanmeldgegevens(gebruikersnaam, wachtwoord);
        } while (checkAanmeldGegevens != true);
        
        if(checkAanmeldGegevens == true) {
            gebruikersNiveau = datacon.database_start_gebruikersLevel(gebruikersnaam);
            Navigatie nav = new Navigatie();
            nav.bepalenGebruikerNiveau(gebruikersNiveau, taal, land);
        
        int keuzeMenu = scanner.nextInt();
        
        nav.keuzeMenu(keuzeMenu, taal, land);
        }       
   }


database gedeelte:
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
    public boolean database_get_aanmeldgegevens(String gebruikersnaam, String wachtwoord) {
        String sqlGebruikersnaam = "SELECT Persoon_ID,Gebruikersnaam FROM Persoon WHERE Gebruikersnaam='" + gebruikersnaam + "'";
        String sqlWachtwoord = "SELECT Persoon_ID,Wachtwoord FROM Persoon WHERE Wachtwoord='" + wachtwoord + "'";
        boolean resultaat = false;
        int checkPersoon_ID_Gebruikersnaam = 1;
        int checkPersoon_ID_Wachtwoord = 2;
        
        try {
            Statement statement = con.createStatement ();
            ResultSet rs = statement.executeQuery(sqlGebruikersnaam);
            ResultSet rs2 = statement.executeQuery(sqlWachtwoord);
            
            if(rs != null) {
                while(rs.next()) {
                    checkPersoon_ID_Gebruikersnaam = rs.getInt ("Persoon_ID");
                }
            }
            
            if(rs2 != null) {
                while(rs2.next()) {
                    checkPersoon_ID_Wachtwoord = rs2.getInt ("Persoon_ID");
                }
            }
            
            rs.close ();
            rs2.close ();
            statement.close ();
        }
        catch (Exception ex) {
        }
        
        if(checkPersoon_ID_Gebruikersnaam == checkPersoon_ID_Wachtwoord) {
            resultaat = true;
        }
        return resultaat;
    }

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Ik vind je oplossing vreemd. Waarom haal je twee resultsets op?

SELECT Persoon_IDFROM Persoon WHERE Gebruikersnaam='Pietje' AND Password='Geheim';

Als je dan 0 records terugkrijgt kloppen de gebruikersnaam en password niet.

Verder een paar zaken die me opvallen:
- Je checked of rs en rs2 niet null zijn, en als die null zijn doe je niks. Als RS of RS2 null zijn is er iets ernstig mis en moet je een exception gooien. Dan maak je het jezelf makkelijker. Want nu zijn die checkPersoon_ID_ vars gevuld met default waarden als er iets mis gaat. Je wijst nooit 'filler' waarden aan variabelen toe tenzij het nodig is, en ze dus een default moeten hebben.

- Je krijgt in je huidige oplossing meerdere resultaten terug voor de query waarin je de hits op wachtwoorden ophaalt. De manier waarop je dit doet, selecteren aan de hand van gebruikersnaam en wachtwoord afzonderlijk is gewoon fout.

- De naamgeving van je methoden is gewoon fout. Lees eens wat over de Java naming conventions. atabase_get_aanmeldgegevens zou op z'n minst getAanmeldGegevensFromDatabase() moeten heten, waarbij ik wil aandringen op volledig engelstalige code.

[ Voor 66% gewijzigd door Hydra op 27-02-2009 15:57 ]

https://niels.nu


Acties:
  • 0 Henk 'm!

Verwijderd

Maak hiervan:
Java:
1
2
catch (Exception ex) {
        } 

eens hetvolgende, en kijk dan of je ergens een foutmelding tegenkomt bij het uitvoeren van je code
Java:
1
2
3
catch (Exception ex) {
            ex.printStackTrace();
        } 


@Guldan:
Als je goed kijkt (lang leven uitlijning) zie je dat die IF-statement na het CATCH-blok staat.

[ Voor 17% gewijzigd door Verwijderd op 27-02-2009 15:55 ]


Acties:
  • 0 Henk 'm!

  • Guldan
  • Registratie: Juli 2002
  • Laatst online: 21-09 11:30

Guldan

Thee-Nerd

Waarom zet je :
code:
1
2
if(checkPersoon_ID_Gebruikersnaam == checkPersoon_ID_Wachtwoord) {
            resultaat = true;
in je catch statement? Deze wordt dan alleen uitgevoerd als de database query een exception gooit. Volgens mij moet je dat gewoon in het try statement zetten.

En vervang zoals eerder aangegeven die twee queries eens door 1.

[ Voor 11% gewijzigd door Guldan op 27-02-2009 15:54 ]

You know, I used to think it was awful that life was so unfair. Then I thought, wouldn't it be much worse if life were fair, and all the terrible things that happen to us come because we actually deserve them?


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21-09 21:47

Creepy

Tactical Espionage Splatterer

Debuggen zul je in eerste instantie zelf moeten doen. Aangeven dat er iets fout gaat en je code dumpen is hier niet voldoende. Dus zet eens wat breakpoints en loop eens stap voor stap dor de code heen. Daarnaast kunnen de twee queries inderdaad beter in 1 query.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op vrijdag 27 februari 2009 @ 15:52:
Maak hiervan:
Java:
1
2
catch (Exception ex) {
        } 

eens hetvolgende, en kijk dan of je ergens een foutmelding tegenkomt bij het uitvoeren van je code
Java:
1
2
3
catch (Exception ex) {
            ex.printStackTrace();
        } 


@Guldan:
Als je goed kijkt (lang leven uitlijning) zie je dat die IF-statement na het CATCH-blok staat.
Dit is de fout die ik krijg:
java.sql.SQLException: ResultSet is closed

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Guldan schreef op vrijdag 27 februari 2009 @ 15:52:
Waarom zet je :
code:
1
2
if(checkPersoon_ID_Gebruikersnaam == checkPersoon_ID_Wachtwoord) {
            resultaat = true;
in je catch statement? Deze wordt dan alleen uitgevoerd als de database query een exception gooit. Volgens mij moet je dat gewoon in het try statement zetten.

En vervang zoals eerder aangegeven die twee queries eens door 1.
Dit staat niet in m'n catch gedeelte hoor.

Acties:
  • 0 Henk 'm!

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 18:16
In je code zit trouwens ook nog een SQL-injection vulnerability.

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Guldan schreef op vrijdag 27 februari 2009 @ 15:52:
Waarom zet je :
code:
1
2
if(checkPersoon_ID_Gebruikersnaam == checkPersoon_ID_Wachtwoord) {
            resultaat = true;
in je catch statement? Deze wordt dan alleen uitgevoerd als de database query een exception gooit. Volgens mij moet je dat gewoon in het try statement zetten.
Dat staat 'ie niet:
Java:
1
2
3
4
5
6
        catch (Exception ex) {
        }
        
        if(checkPersoon_ID_Gebruikersnaam == checkPersoon_ID_Wachtwoord) {
            resultaat = true;
        } 
matthijsln schreef op vrijdag 27 februari 2009 @ 15:57:
In je code zit trouwens ook nog een SQL-injection vulnerability.
Klopt, maar hou er ff rekening mee dat dit z'n eerste database opdracht in Java is. Parameterized queries komen waarschijnlijk later, en je moet iemand niet te veel op z'n bordje leggen.
Verwijderd schreef op vrijdag 27 februari 2009 @ 15:56:
[...]

Dit is de fout die ik krijg:
java.sql.SQLException: ResultSet is closed
Dan check je even op welke regel die optreedt? Dat kunnen wij toch niet ruiken? je zult in ieder geval zelf moeten leren je code te debuggen. Gebruiken jullie een IDE of notepad?

[ Voor 39% gewijzigd door Hydra op 27-02-2009 16:01 ]

https://niels.nu


Acties:
  • 0 Henk 'm!

  • Guldan
  • Registratie: Juli 2002
  • Laatst online: 21-09 11:30

Guldan

Thee-Nerd

@Dexon,Esotériques en hydra: eh oeps... volgende volgens mij is mijn cafeïne niveau te laag gedaald.

Maargoed.. resultset closed betekent meestal dat je nog wat probeert doen met een resultset die gesloten is.

[ Voor 29% gewijzigd door Guldan op 27-02-2009 16:03 ]

You know, I used to think it was awful that life was so unfair. Then I thought, wouldn't it be much worse if life were fair, and all the terrible things that happen to us come because we actually deserve them?


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Guldan schreef op vrijdag 27 februari 2009 @ 16:01:
@Dexon,Esotériques en hydra: eh oeps... volgende volgens mij is mijn cafeïne niveau te laag gedaald.

Maargoed.. resultset closed betekent meestal dat je nog wat probeert doen met een resultset die gesloten is.
Yup. Ik vermoed dat het komt omdat 'ie resultset aan een statement gelinkt is, en als je rs2 aangemaakt wordt, rs gesloten wordt. Maar hoe dan ook moet 't omgebouwd worden naar 1 query, dit is gewoon fout, en als je leraar dit slikt zegt dat een hoop over je opleiding.

https://niels.nu


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dit is inderdaad m'n eerste opdracht met een database! We hebben zelfs nog geen lessen erover gehad dus ik heb alles moeten opzoeken op internet daarom dat het een rare oplossing in maar ik kan niet echt bedenken hoe ik dit anders kan laten doen :(

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Verwijderd schreef op vrijdag 27 februari 2009 @ 16:06:
Dit is inderdaad m'n eerste opdracht met een database! We hebben zelfs nog geen lessen erover gehad dus ik heb alles moeten opzoeken op internet daarom dat het een rare oplossing in maar ik kan niet echt bedenken hoe ik dit anders kan laten doen :(
Ik geef je letterlijk de query in m'n eerste reply, wat snap je niet?

https://niels.nu


Acties:
  • 0 Henk 'm!

Verwijderd

Probeer eens een tutorial te zoeken, zoals deze bijvoorbeeld:
http://www.ivobrugge.be/cursusweb/java/jdbc.asp

Of "vind" dit boek, op internet of bij de bieb op je school: Core Java 2 - Volume II - Advanced Features, 7th Edition (2004)

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21-09 21:47

Creepy

Tactical Espionage Splatterer

Hmmja, zo wordt het echt een "bij-het-handje-hou" topic en dat is nu net niet de bedoeling. Dat je nog niet alles weet is niet erg maar zelf even stap voor stap door de code heen lopen is wel het minste wat je kan doen en zelfs dat doe je niet (of je geeft het niet aan dat je dat hebt gedaan met uitleg wat er niet lukt etc ;) ).
Ook erg dubieus dat je een opdracht moet doen waarvan de stof nog behandeld moet worden. Je kan ook aan je docent vragen om meer uitleg natuurlijk.

Ga echt zelfs eens debuggen (in de PRG FAQ staat daar een mooi stukje over geschreven). MOcht je er dan nog niet uitkomen dan kan je een nieuw topic openen maar geef dan aan wat je zelf al hebt geprobeerd en wat daar niet mee lukte.

[ Voor 11% gewijzigd door Creepy op 27-02-2009 16:10 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.