Toon posts:

[java] "unreported exception" SQLException?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een klasse gemaakt (class Db). In die klasse, zit een functie 'Query'.
Als ik een query aan de functie Query meegeef, wordt deze goed uitgevoerd. Bij een selectquery kan ik ook gewoon door de resultset heenbladeren.
Alleen, als ik de Query functie vanuit een andere klasse wil aanroepen, wordt de query zelf wel uitgevoerd, maar kan ik niet door de resultset heenbladeren. Ik krijg dan een foutmelding dat 'next()' niet werkt.

Dit is die melding:

code:
1
2
3
4
TestDB.java:51: unreported exception java.sql.SQLException; must be caught or declared to be thrown
                        dBase.rs.next();
                                      ^
1 error


Ik heb wel try/catch gebruikt in de functies, dus ik zou niet echt weten waar hier de fout kan liggen. Ik heb al gezocht op google, java.sun.com en natuurlijk GoT, maar geen oplossing gevonden.

Het lijkt erop dat het programmaatje de functie 'next()' niet kent. Het helpt niet als ik 'import.sql.*' bij die nieuwe klasse toevoeg.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Laat de code eens zien zeg maar rondom regel 51.

offtopic:
let volgende keer even op dat je je topictitel wel afmaakt voordat je post

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 19-08 23:13
Blijkbaar wordt niet de goede Exception opgevangen.

Verwijderd

Topicstarter
offtopic:
Oeps, topictitel idd niet afgemaakt. Excuses.


code:
1
2
3
4
DB dBase=new Db();
dBase.Query("SELECT * FROM werknemers");
dBase.rs.next();
// rs is een ResultSet, wordt in class Db aangemaakt


Ik hoop dat je hier iets meer aan hebt.

Verwijderd

wil je een try catch closule hebben die altijd werkt gebruik dan de volgende:

code:
1
2
3
4
5
try {
   //code die exceptie kan genereren
} catch( Exception e) {
   System.err.println(e);
}


een netere oplossing in dit geval is:

code:
1
2
3
4
5
try {
   dBase.next();
} catch( SQLException e) {
   System.err.println("SQL Fout: "+e);
}


Zie ook: http://java.sun.com/docs/...ial/essential/exceptions/

[ Voor 8% gewijzigd door Verwijderd op 18-11-2003 14:37 ]


Verwijderd

Topicstarter
Gek, als ik een try/catch eromheen zet, wordt het helemaal niet meer uitgevoerd.

Ik heb m'n classes even online gezet. Dat zal een hoop ophelderen, hoop ik.

Db.java
Start.java

Let even niet op de hier en daar wat gekke dingen, zoals output plaatsen in een button (button.setText(output) bijvoorbeeld). Puur testwerk. Los ik nog op, had alleen nog geen zin om het nu te doen.

Alvast bedankt!

Verwijderd

Verwijderd schreef op 18 november 2003 @ 14:55:
Gek, als ik een try/catch eromheen zet, wordt het helemaal niet meer uitgevoerd.

Ik heb m'n classes even online gezet. Dat zal een hoop ophelderen, hoop ik.

Db.java
Start.java

Let even niet op de hier en daar wat gekke dingen, zoals output plaatsen in een button (button.setText(output) bijvoorbeeld). Puur testwerk. Los ik nog op, had alleen nog geen zin om het nu te doen.

Alvast bedankt!
In de klasse Start.java wordt de methode dBase.rs.next(); helemaal niet getrycatched ligt dat aan de src die je op de site heb gezet of.... :?

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

Robtimus

me Robtimus no like you

Waarom roep je eigenlijk die next aan?

Je roept query aan, die zet de resultset. Ik weet niet waar die meteen staat, maar je kunt ook rs.first() aanroepen. Als die false is weet je meteen of je uberhaupt wel results hebt.

Ow, en je probeert werknemer_voornaam uit je resultset te halen terwijl die column niet eens geselecteerd is.

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


Verwijderd

IceManX schreef op 18 november 2003 @ 15:03:
Waarom roep je eigenlijk die next aan?

Je roept query aan, die zet de resultset. Ik weet niet waar die meteen staat, maar je kunt ook rs.first() aanroepen. Als die false is weet je meteen of je uberhaupt wel results hebt.

Ow, en je probeert werknemer_voornaam uit je resultset te halen terwijl die column niet eens geselecteerd is.
Niet alle JDBC drivers hebben een first() methode.
En omdat de pointer in de rs altijd 1 voor de eerste waarde staat roep je zowieso meteen de methode next() aan.

Verwijderd

Topicstarter
Op dit moment wordt er inderdaad niet ge-try-catched. Dat klopt, dat heb ik namelijk weer weggehaald, omdat het niet werkte. Er werd niets van try{} uitgevoerd, maar ook niets van catch{}.

Kolomnaam is aangepast btw. Helaas is dat niet de oplossing, maar toch bedankt!!

Verwijderd

Verwijderd schreef op 18 november 2003 @ 15:10:
Op dit moment wordt er inderdaad niet ge-try-catched. Dat klopt, dat heb ik namelijk weer weggehaald, omdat het niet werkte. Er werd niets van try{} uitgevoerd, maar ook niets van catch{}.

Kolomnaam is aangepast btw. Helaas is dat niet de oplossing, maar toch bedankt!!
Dan moet je toch echt eerst gaan debuggen waarom de hele rs.next(); niet wordt uitgevoert.
Probeer met een System.out.println("werkt"); te kijken of hij daar uberhaupt wel komt.

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

Robtimus

me Robtimus no like you

Verwijderd schreef op 18 november 2003 @ 15:07:
Niet alle JDBC drivers hebben een first() methode.
En omdat de pointer in de rs altijd 1 voor de eerste waarde staat roep je zowieso meteen de methode next() aan.
Allereerst: JDBC drivers die ResultSet implementeren en geen first() method hebben vind ik slecht. Zodra je een interface implementeert moet je IMHO alle methods implementeren, dus ook first().

Waar staat eigenlijk gedefinieerd dat de pointer voor de eerste waarde staat? Ik heb dit niet gezien in de specificatie (kan erlangs hebben gekeken), en vind het een illegale aanname totdat het wel in de specificatie staat. Tot die tijd zal ik altijd specifiek een beforeFirst() aanroepen om er zeker van te zijn dat de pointer daar staat.

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


  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 14:22
Houdt je ook rekening dat die resultset leeg kan zijn :?
Volgens mij nu niet.

let the past be the past.


Verwijderd

IceManX schreef op 18 november 2003 @ 15:12:
[...]
Allereerst: JDBC drivers die ResultSet implementeren en geen first() method hebben vind ik slecht. Zodra je een interface implementeert moet je IMHO alle methods implementeren, dus ook first().

Waar staat eigenlijk gedefinieerd dat de pointer voor de eerste waarde staat? Ik heb dit niet gezien in de specificatie (kan erlangs hebben gekeken), en vind het een illegale aanname totdat het wel in de specificatie staat. Tot die tijd zal ik altijd specifiek een beforeFirst() aanroepen om er zeker van te zijn dat de pointer daar staat.
Allereerst: bv de JDBC van Sybase kent deze methode niet, hij is ook eigenlijk nutteloos met de methode next() kan je alles doen.

En precies om deze rede en ook omdat een rs leeg kan zijn is het een feit dat de pointer altijd begint 1 voor de eerste result.

Zie ook http://java.sun.com/j2se/...sql/ResultSet.html#next()
dat zegt:

public boolean next()
throws SQLExceptionMoves the cursor down one row from its current position. A ResultSet cursor is initially positioned before the first row; the first call to the method next makes the first row the current row; the second call makes the second row the current row, and so on.

Verwijderd

SPee schreef op 18 november 2003 @ 15:17:
Houdt je ook rekening dat die resultset leeg kan zijn :?
Volgens mij nu niet.
Dat gebeurt inderdaad ook niet.
Maar zover is hij nog niet denk ik ;)
Dit is echter wel simpel optelossen door bij de eerste keer next() aan teroepen kijken of deze false returned.

Verwijderd

Topicstarter
Verwijderd schreef op 18 november 2003 @ 15:12:
[...]


Dan moet je toch echt eerst gaan debuggen waarom de hele rs.next(); niet wordt uitgevoert.
Probeer met een System.out.println("werkt"); te kijken of hij daar uberhaupt wel komt.
Ik heb het nog eens geprobeerd door het tussen try en catch te zetten, maar hij skipt gewoon het hele try en catch-gedeelte lijkt het wel.
rs.next werkt in de class-file Db.class wel goed.

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

Robtimus

me Robtimus no like you

@Zixon: Ah ok, die had ik niet gezien. Ik had dat verwacht bij Statement.executeQuery, daar had ik gekeken.

Echter, het staat ook gewoon in de inleidende tekst van ResultSet:
A ResultSet object maintains a cursor pointing to its current row of data. Initially the cursor is positioned before the first row. The next method moves the cursor to the next row, and because it returns false when there are no more rows in the ResultSet object, it can be used in a while loop to iterate through the result set.
My bad dus.

En toch vind ik dat first() geimplementeerd moet worden :P Deze returned nml false als de set leeg is.

[ Voor 5% gewijzigd door Robtimus op 18-11-2003 15:22 ]

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


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

Alarmnummer

-= Tja =-

IceManX schreef op 18 november 2003 @ 15:12:
[...]
Allereerst: JDBC drivers die ResultSet implementeren en geen first() method hebben vind ik slecht. Zodra je een interface implementeert moet je IMHO alle methods implementeren, dus ook first().
Het ligt eraan welke versie jdbc ondersteunt wordt :)

Scrollable resultset worden pas vanaf versie 2 ondersteund.
Waar staat eigenlijk gedefinieerd dat de pointer voor de eerste waarde staat?
Is standaard :)

Verwijderd

Topicstarter
Is er nog iemand die kan helpen met mijn probleem? Het lukt me met geen mogelijkheid om gebruik te maken van rs in de class-file Start.class. Ik blijf de foutmelding krijgen en ik heb echt geen idee hoe ik dit op moet lossen.

Verwijderd

Verwijderd schreef op 19 november 2003 @ 11:04:
Is er nog iemand die kan helpen met mijn probleem? Het lukt me met geen mogelijkheid om gebruik te maken van rs in de class-file Start.class. Ik blijf de foutmelding krijgen en ik heb echt geen idee hoe ik dit op moet lossen.
Misschien moet je je probleem wat duidelijker formuleren.
Wat is precies nu nog de error?
Want als je vanuit de klasse Start.class de error krijgt van de topic titel, dan voert hij vanuit Start.java wel rs.next() aan maar vang je de eventuele exceptie niet op (wat in java wel verplicht is)

Verwijderd

Topicstarter
Verwijderd schreef op 19 november 2003 @ 11:08:
[...]


Misschien moet je je probleem wat duidelijker formuleren.
Wat is precies nu nog de error?
Want als je vanuit de klasse Start.class de error krijgt van de topic titel, dan voert hij vanuit Start.java wel rs.next() aan maar vang je de eventuele exceptie niet op (wat in java wel verplicht is)
Ik krijg nog steeds hetzelfde probleem:

ik heb het volgende stukje code in mijn Start.java staan:

code:
1
2
3
4
    dBase.Query("SELECT * FROM werknemers where werknemer_voornaam = '" + test + "'", "select");
            
    dBase.rs.next();
    this.btnLoginName.setText("" + dBase.rs.getString("werknemer_login"));


hierbij krijg ik de volgende foutmelding:

Start.java:54: unreported exception java.sql.SQLException; must be caught or declared to be thrown
dBase.rs.next();
^
Start.java:55: unreported exception java.sql.SQLException; must be caught or declared to be thrown
this.btnLoginName.setText("" + dBase.rs.getString("werknemer_login"));

Verwijderd

code:
1
2
3
4
5
6
try {
    dBase.Query("queryding");
    dBase.rs.next();
} catch ( SQLException ex) {
    log.log(Level.INFO, "Error during query processing");
}


Zoiets dergelijks al gedaan?

rs.next() kan een exception throwen die je ergens of moet vangen of die methode als throws blah definieren.

public boolean next()
throws SQLException
(uit de javadoc)

[ Voor 31% gewijzigd door Verwijderd op 19-11-2003 11:21 ]


  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 19-08 23:13
edit:
Kwas een tikkeltje laat

[ Voor 84% gewijzigd door Dash2in1 op 19-11-2003 11:21 ]


Verwijderd

Daar hebben we toch dit hele topic over gehad :?
Al vanaf het begin lopen we tegen je te roepen dat je die exceptie moet afvangen incl. voorbeelden en urls, naja ik weet het ook niet meer hoor |:(

Verwijderd

Topicstarter
Verwijderd schreef op 19 november 2003 @ 11:20:
code:
1
2
3
4
5
6
try {
    dBase.Query("queryding");
    dBase.rs.next();
} catch ( SQLException ex) {
    log.log(Level.INFO, "Error during query processing");
}
Zoiets dergelijks al gedaan?

rs.next() kan een exception throwen die je ergens of moet vangen of die methode als throws blah definieren.

public boolean next()
throws SQLException
(uit de javadoc)
Ja.. ik heb dit gedaan, het probleem is dan dat het lijkt of de try helemaal niet wordt uitgevoerd. Wanneer ik deze laat uitvoeren gebeurt er nml helemaal niks.
code:
1
2
3
4
5
6
7
8
9
10
 try
 {
   dBase.Query("SELECT * FROM werknemers where werknemer_voornaam = '" + test + "'", "select");
   dBase.rs.next();
   this.btnLoginName.setText("" + dBase.rs.getString("werknemer_voornaam"));
 }
 catch (SQLException ex)
 {
   this.btnLoginName.setText("" + "Error during query processing");
 }

[ Voor 23% gewijzigd door Verwijderd op 19-11-2003 11:31 ]


Verwijderd

Print of log je de exception wel dan?

Verwijderd

Verwijderd schreef op 19 november 2003 @ 11:31:
Print of log je de exception wel dan?
Daar zeg je idd ook nog wat :)
Als hij mijn eerder voorbeeld heeft opgevolgt iig wel.

Verwijderd

Topicstarter
Dat wordt hier toch gedaan:

code:
1
   this.btnLoginName.setText("" + ex);

Verwijderd

Verwijderd schreef op 19 november 2003 @ 11:49:
Dat wordt hier toch gedaan:

code:
1
   this.btnLoginName.setText("" + ex);
Wat er wordt bedoelt is of je de EXCEPTIE wel opvangt en weer geeft.
Zoals eerder in dit topic door mij al aangegeven als:

code:
1
2
3
4
5
try {
   dBase.next();
} catch( SQLException e) {
   System.err.println("SQL Fout: "+e);
}


Hier zie je dat dBase.next() wordt aangeroepen mocht dit nou fout gaan dan komt hij in de catch te zitten en print hij vervolgens in je error console de string:
SQL Fout: <hier de echte error>

Verwijderd

Topicstarter
Ok. dat snap ik wel. Ik doe dat toch ook? Ik laat alleen de error weergeven in een button. ik weet het dat is vreemd, maar het zou toch gewoon moeten werken.

Ah.. sorry ik deed het dus toch verkeerd. Hier komt mijn errorcode:

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
java.lang.NullPointerException
        at Start.actionPerformed(Start.java:55)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
        at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
        at java.awt.Component.processMouseEvent(Component.java:5100)
        at java.awt.Component.processEvent(Component.java:4897)
        at java.awt.Container.processEvent(Container.java:1569)
        at java.awt.Component.dispatchEventImpl(Component.java:3615)
        at java.awt.Container.dispatchEventImpl(Container.java:1627)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
        at java.awt.Container.dispatchEventImpl(Container.java:1613)
        at java.awt.Window.dispatchEventImpl(Window.java:1606)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)

[ Voor 117% gewijzigd door Verwijderd op 19-11-2003 12:11 ]


  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10-2025
NullPointers, whoei!

Je hebt iets niet geinitialiseerd (ik neem aan de resultset).


PS. Ik raad aan om een IDE in debugmode met breakpoints te gebruiken, had je zo hieruit kunnen komen

[ Voor 39% gewijzigd door reddevil op 19-11-2003 12:31 ]


Verwijderd

Topicstarter
Het blijkt dus dat de query helemaal niet wordt uitgevoerd zover ik kan zien. Hoe kan ik dit dan oplossen. De klass Query uit Db.class wordt toch gewoon aangeroepen. Hij zou dan toch gewoon moeten werken.
reddevil schreef op 19 november 2003 @ 12:30:
NullPointers, whoei!

Je hebt iets niet geinitialiseerd (ik neem aan de resultset).
en hoe doe ik dat?

[ Voor 35% gewijzigd door Verwijderd op 19-11-2003 12:31 ]


  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10-2025
Ja sorry hoor, ik bedoel, als je het initialiseren niet al volgt moet je toch een boekje over java ofzo gaan zoeken of google

Verwijderd

Topicstarter
reddevil schreef op 19 november 2003 @ 12:30:
PS. Ik raad aan om een IDE in debugmode met breakpoints te gebruiken, had je zo hieruit kunnen komen
wat bedoel je hiermee?

Verwijderd

Iets als Eclipse, JBuilder, IntellliJ enzo.

Je kan dan met debuggen per regel door je code stappen enzo zien wat de waarden van elke variabele is. Op die manier kan je snel je fouten vinden.

Ik raad je aan eerst een test klasse te schrijven die alleen maar een query naar de database doet. Gebruik hiervoor een zo minimaal mogelijke klasse die verder niets anders doet. Op die manier kan je je fout sneller localizeren.


Er zitten zowiezo nog wel wat meer fouten in, zoals het niet sluiten van de database connection etc.

  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10-2025
om maar even te helpen toch

1. je kijkt niet of je connection is gelukt
2. je connection zal niet gelukt zijn, daar komt die null pointer vandaan
3. als je connectie gelukt ie moet je hem ook weer sluiten

Verwijderd

Probeer eens dit:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    public void Query(String qry, String type)
    {
        try
        {
            Statement stmt = this.connection.createStatement();
            if (type.equals("select"))
            {
                this.rs = stmt.executeQuery(qry);
            }
            else
            {
                stmt.executeUpdate(qry);
            }
        }
        catch (SQLException e)
        {
            System.out.println("ERROR: " + e);
        }
    }


en het zit um dus in die type.equals("select") mocht je het verschil niet kunnen vinden.

en als je slim bent throw je hier die exceptie. Als je dan de aanroep van query bijin het try-catch block zet vlak voordat je je rs.next() doet dan weet je zeker dat ie die next() nooit zal uitvoeren als de query fout ging om wat voor reden dan ook.

  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10-2025
het ligt niet aan equals hoor, het ligt eraan dat z'n connection null is


(string1 == string2 levert bijna altijd false op, equals is om de inhoud van de string te vergelijken zoals juist staat)

Aangepast de code hierboven:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    public boolean Query(String qry, String type)
    {
        if (this.connection == null)
            return false;
        try
        {
            Statement stmt = this.connection.createStatement();
            if (type.equals("select"))
            {
                this.rs = stmt.executeQuery(qry);
            }
            else
            {
                stmt.executeUpdate(qry);
            }
        }
        catch (SQLException e)
        {
            System.out.println("ERROR: " + e);
            return false;
        }
        return true;
    }


Ik heb de code even gewijzigd zodat hij 'true' returned op het moment dat de query is gelukt, anders geeft hij false terug

[ Voor 61% gewijzigd door reddevil op 19-11-2003 12:52 ]


Verwijderd

reddevil schreef op 19 november 2003 @ 12:50:
het ligt niet aan equals hoor, het ligt eraan dat z'n connection null is

(string1 == string2 levert bijna altijd false op, equals is om de inhoud van de string te vergelijken zoals juist staat)
Dus moet het equals worden, dat zeg ik...
En wat betreft het null zijn van de connectie... dan kreeg ie een nullpointerexception in DBase::Query(String,String) en niet in Start::actionPerformed() dus z'n resultset is niet geset. Wat dus wel degelijk door die equals kan komen omdat ie een select doet waarbij ie een resultset verwacht maar die krijg ie dus niet omdat die == false oplevert.

Verwijderd

Topicstarter
Het is opgelost! Allemaal bedankt. Hier is mijn code:

Db:

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
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
import java.sql.*;

public class Db
{
    static Connection connection = null;
    public ResultSet rs;

    public Db()
    {
        try
        {
            String driverName = "org.gjt.mm.mysql.Driver"; // MySQL MM JDBC driver
            Class.forName(driverName);

            String serverName = "localhost";
            String mydatabase = "java";
            String url = "jdbc:mysql://" + serverName +  "/" + mydatabase; // a JDBC url
            String username = "****";
            String password = "****";
            this.connection = DriverManager.getConnection(url, username, password);
        }
        catch (ClassNotFoundException e)
        {
            System.out.println("ClassNotFoundException");
        }
        catch (SQLException e)
        {
            System.out.println("ERROR: " + e);
        }
    }

    public static void main(String[] args)
    {
        Db dbtest = new Db();
    }

    public void  Query(String qry, String type)
    {
        try
        {
            Statement stmt = this.connection.createStatement();
            if (type == "select")
            {
                rs = stmt.executeQuery(qry);
            }
            else
            {
                stmt.executeUpdate(qry);
            }
        }
        catch (SQLException e)
        {
            System.out.println("ERROR: " + e);
        }
    }

}


Start:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if (e.getSource() == this.btnLoginName)
        {
            loginName = this.txtLoginName.getText();
            passWord = this.txtPassWord.getText();
            try
            {
                dBase.Query("SELECT * FROM werknemers where werknemer_voornaam = '" + test + "'", "select");
                dBase.rs.next();
                System.out.println("" + dBase.rs.getString("werknemer_voornaam"));
                this.btnLoginName.setText("" +dBase.rs.getString("werknemer_voornaam"));
            }
            catch (SQLException ex)
            {
                System.err.println("SQL Fout: "+ex);
            }
        }
        else
        {
        }

Verwijderd

Volgens mij kan je het best nog wel even wat dingen lezen over JDBC en Java.

Enkele hints:
-PreparedStatement
-conn.close()
-equals(), equality of reference

en nog wel wat dingen.

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Verwijderd schreef op 19 november 2003 @ 13:13:
Het is opgelost! Allemaal bedankt. Hier is mijn code:

Db:

code:
1
2
3
4
5
6
7
8
9
10
<knip>
            if (type == "select")
            {
                rs = stmt.executeQuery(qry);
            }
            else
            {
                stmt.executeUpdate(qry);
            }
<knip>
Dit werkt toch niet? type== "select" ? type.equals("select") lijkt mij een meer zinnig statement. Volgens mij wordt er dynamisch een String object gemaakt voor die "select" die uiteraard nooit dezelfde referentie is als type. Daarmee wordt ALTIJD de executeUpdate uitgevoerd.

[ Voor 10% gewijzigd door zneek op 19-11-2003 19:48 ]


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
zneek schreef op 19 november 2003 @ 19:48:
Dit werkt toch niet? type== "select" ? type.equals("select") lijkt mij een meer zinnig statement. Volgens mij wordt er dynamisch een String object gemaakt voor die "select" die uiteraard nooit dezelfde referentie is als type. Daarmee wordt ALTIJD de executeUpdate uitgevoerd.
Grappig, maar nee, niet altijd, maar het geeft in ieder geval niet het door de topicstarter gewenste resultaat nee ;)

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class TestClass {

    public static void main( String[] args ) {

        testing( "TEST" );
        testing( new String( "TEST") );
    }

    public static void testing( final String p_type ) {

        String l_printMsg = "Not Equal";

        if( p_type == "TEST" )
            l_printMsg = "Equal";

        System.out.println( l_printMsg );
    }
}
geeft hier Equal \ Not Equal resp.
De JVM deelt dus string constants en slaat ze niet apart op. Daardoor is "TEST" == "TEST" ook true.

[edit] Leuk trouwens dat je dit ook gewoon kunt doen met het doorpassen van een final String. Deze wordt dus ook gewoon gedeeld :) Eigenlijk wel logisch. Wat is "TEST" immers meer dan een final String met "TEST" als input?

[ Voor 13% gewijzigd door Glimi op 19-11-2003 21:04 ]


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
* zneek noteert ......

Weer wat geleerd ;)
Pagina: 1