Toon posts:

Java hulp: java.lang.NullPointerException

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste mede Gotters..

Even het volgende probleempje:

Ik heb de volgende methode in de Klasse ConnectDB:

code:
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
public static String Login(String gebruikersnaam, String paswoord) {
    String nnaam = "test";
    System.out.println(gebruikersnaam + paswoord);
    String sql = "SELECT * FROM tblGebruikers WHERE username = '" + gebruikersnaam + "' AND paswoord = '" + paswoord + "'";
    try {
        Statement statement = con.createStatement();
        ResultSet rs = statement.executeQuery(sql);

        while(rs.next()) {
            String naam = rs.getString("naam");
            String voornaam = rs.getString("voornaam");
            int gebruikernr = rs.getInt("Gebruikernr");
            int level = rs.getInt("level");
            System.out.println("Gelukt!" + naam);
            Gebruiker gebruiker = new Gebruiker(gebruikernr, voornaam, naam, level);
            gebruiker.setVoornaam(voornaam);
            gebruiker.setNaam(naam);
            return naam;
        }
        rs.close();
        statement.close();
        return nnaam;
    }
    catch (Exception ex) {
        System.out.println("Error reading the database information!");
        System.out.println(ex);
}

    return nnaam;
}


Als ik deze uitvoer in de klasse ConnectDB zelf, werkt die. er wordt perfect nagekeken ofdat wachtwoord/loginnaam in de database voorkomen.

Ik wil deze methode echter oproepen vanuit men Uitvoeren klasse, als ik die dan uitvoer krijg ik steeds dit:
Error reading the database information!
java.lang.NullPointerException


Dit is toch raar? ik bedoel het werkt als ik hem aanroep vanuit de ConnectDB klasse, waarom dan niet vanuit mijn Uitvoeren klasse?

hij staat trouwens zo in men uitvoeren klasse: ConnectDB.Login(username, passwoord);
Wat doe ik nu eigenlijk precies fout?
Op de java site wordt gezegd dat die foutmelding gegeven wordt als hij een object terug verwacht ipv een string, wat bedoelen ze dan precies? ik kan daar toch geen object plaatsen of wel?

Acties:
  • 0 Henk 'm!

  • Zsub
  • Registratie: Juli 2006
  • Laatst online: 21:51
Kan je lap code even binnen [code]-tags gooien, misschien? Dat leest een stuk prettiger voor iedereen :)

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Op welke regel?

En ipv Exception te catchen, zou je SQLException moeten catchen, dan krijg je meer info.

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • kw4h
  • Registratie: Februari 2008
  • Laatst online: 22-09 09:00
Zsub schreef op vrijdag 20 februari 2009 @ 22:00:
Kan je lap code even binnen [code]-tags gooien, misschien? Dat leest een stuk prettiger voor iedereen :)
Dat is inderdaad gewenst.

Verder: in plaats van
Java:
1
System.out.println(ex);


Probeer eens:
Java:
1
ex.printStackTrace();


Komt misschien iets meer zo'n melding.

Acties:
  • 0 Henk 'm!

  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04 20:48
Je begrip van wat een NullPointerException is, is wat beperkt.
Zo'n exception krijg je als iets doet (bv een methode aanroept) met een variabele die nog niet naar een object wijst.
Oftewel:
Java:
1
2
Object o = null;
String = o.toString(); //Java gooit nu een exception op o.toString(), omdat o nog null is en je dus een methode op null (= geen object) wil aanroepen.


Als ik dan naar jouw code kijk, ziet het er allemaal nog vrij veilig uit, behalve het stukje
Java:
1
Statement statement = con.createStatement();

Omdat jouw fragment code niet laat zien hoe / wanneer con wordt gevuld met een object(referentie).

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'


Acties:
  • 0 Henk 'm!

  • Brian
  • Registratie: Oktober 2006
  • Laatst online: 05-08 14:09
Ik kan zo één, twee, drie niet zijn waar de nullpointer exception vandaan komt, een regelnummer zou erg handig kunnen zijn. Wat mij wel opvalt; als "het" gelukt is dan return je op regel 18: naam. Maar vervolgens close je de resultset en statement pas op de regels die daarna volgen.

Acties:
  • 0 Henk 'm!

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 22:46
In je code zit trouwens een SQL-injection vulnerability.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hey, bedankt allemaal :), de nullpointer exception is eruit, men kennis over die foutcode was idd mss iets te beperkt... (ik had het nu veranderd zodat ik meer info kreeg, de lijn enzo,... en dan heb ik het zelf kunnen oplossen)
Ik heb in ieder geval nog een laatste vraagje.

Met onderstaand script vraag ik de naam,voornaam en level van een gebruiker op. (nadat die succesvol ingelogd is), hoe kan ik die informatie plaatsen in een String die in een andere klasse staat (namelijk in men klasse Uitvoeren)

Zelf had ik al gedacht aan setters en getters, maar dat lijkt me geen optie omdat ik in de klasse Uitvoeren geen objecten heb... kan ik die gewoon meegeven met een return statement zonder dat die in beeld komen?
code:
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
protected String Login(String gebruikersnaam, String paswoord) {
    System.out.println(gebruikersnaam + paswoord);
    String sql = "SELECT * FROM tblGebruikers WHERE username = '" + gebruikersnaam + "' AND paswoord = '" + paswoord + "'";
    try {
        Statement statement = con.createStatement();
        ResultSet rs = statement.executeQuery(sql);
        while(rs.next()) {
            String naam = rs.getString("naam");
            String voornaam = rs.getString("voornaam");
            int level = rs.getInt("level");
            System.out.println("Gelukt!" + naam);
            return naam;
        }
        rs.close();
        statement.close();

    }
    catch (Exception ex) {
        System.out.println("Error reading the database information!");
        System.out.println(ex);
}
    return null;


}

Acties:
  • 0 Henk 'm!

  • DutchCommando
  • Registratie: November 2000
  • Laatst online: 20:37
1. Maak een klasse welke een gebruiker representeert en retourneer deze vanuit je Login methode.
2. Bij het ophalen van de data worden connecties naar de databron geopent, deze worden echter nooit gesloten als de gebruiker gevonden wordt (finally keyword). Feitelijk zorgt dit ervoor dat unmanaged resources zoals de database connectie langer open blijven staan dan nodig. Pas op het moment dat de garbage collector langs komt fietsen wordt de connectie gesloten.
3. Je code is gevoelig voor SQL injectie (zoals Matthijsln aangaf).
4. Vraag je af of je alle excepties wilt afvangen of slechts een aantal specifieke exceptions.

Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:03

Robtimus

me Robtimus no like you

DutchCommando schreef op zaterdag 21 februari 2009 @ 14:38:
3. Je code is gevoelig voor SQL injectie (zoals Matthijsln aangaf).
Tip: gebruik PreparedStatement ipv Statement.

More than meets the eye
There is no I in TEAM... but there is ME
system specs

Pagina: 1