[Java / SQL]

Pagina: 1
Acties:
  • 157 views sinds 30-01-2008
  • Reageer

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
WTF is "Fout in functievolgorde"?

Ik krijg een SQLException in mijn Java applicatie.
Waardaar kan deze veroorzaakt worden?

WhatPulse! - Rosetta@Home - Docking@Home


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Dan zal je toch even wat meer code en de melding moeten posten.

SQLException is de generieke foutmelding voor alles wat met JDBC te maken heeft: connectie maken, foute query, foute update enz. Het kan dus aan ontzettend veel zaken liggen.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
Ik zal ff wat specifieker zijn

Hij geeft die fout op deze regel:
code:
1
Werkadresnum = Integer.parseInt(resultaat.getString("Werkadresnummer"),10);

Werkadresnum is een int.
en resultaat is een Resultset, met het resultaat van een Select opdracht.

WhatPulse! - Rosetta@Home - Docking@Home


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Windoos-vernieler: Werkadresnum = Integer.parseInt(resultaat.getString("Werkadresnummer"),10);
Hum, omdat de foutmelding Nederlands is, komt hij waarschijnlijk uit je database systeem....

Weet je zeker dat de kolomnaam goed is? Probeer het eens met de columnIndex?

Waarom gebruik je trouwens niet getInt("Werkadresnummer")?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
De colomnaam is 100% zeker goed. En als die niet goed was, dan kreeg ik een andere foutmelding.

Die Melding komt van mijn Database systeem af ja, al mijn SQLExceptions zijn in het nederlands.

En bedankt voor die tip van getInt, scheelt alvast weer wat code.

Maar hiermee is nog nix opgelost

WhatPulse! - Rosetta@Home - Docking@Home


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Windoos-vernieler: Die Melding komt van mijn Database systeem af ja, al mijn SQLExceptions zijn in het nederlands.
Wat gebruik je dan? MS Access en JDBC-ODBC driver?

Je zou zeggen dat het een probleem in de driver moet zijn.... maar het is wel een vage melding...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
Om jullie wat meer inzicht te geven op de situatie geef ik ff de hele functie:
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
  public void LaatWerkadresZien()
  {
    try
    {
    Connection mycon = DriverManager.getConnection("jdbc:odbc:hurk");
    Statement mystatement = mycon.createStatement();
    ResultSet resultaat = mystatement.executeQuery("SELECT * FROM WerkadresGegevens WHERE Debiteurnummer = "+DebiteurnummerTF.getText()+" ORDER BY Werkadresnummer");
    for (int i=0;i<=WerknaamCB.getSelectedIndex();i=i+1)
    {
      resultaat.next();
    }
    Werkadresnum = resultaat.getInt("Werkadresnummer");
    WerkadresTF.setText(resultaat.getString("Adres"));
    WerkpostcodeTF.setText(resultaat.getString("Postcode"));
    WerkplaatsTF.setText(resultaat.getString("Plaats"));
    WerkafstandTF.setText(resultaat.getString("Afstand"));
    WerkreistijdTF.setText(resultaat.getString("Reistijd"));
    resultaat.close();
    mystatement.close();
    mycon.close();
    }
    catch(SQLException ex)
    {
    JOptionPane.showMessageDialog(null,"SQL Exception3: "+ex.getMessage().substring(39),"Fout",JOptionPane.ERROR_MESSAGE);
    }
  }

hopelijk hebbe jullie er wat aan

WhatPulse! - Rosetta@Home - Docking@Home


  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
deze gebruik ik:

jdbc:odbc:

WhatPulse! - Rosetta@Home - Docking@Home


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Voor de eerste resultaat opvraag uit je resultset moet je altijd een .next() gedaan hebben om de pointer op de eerste positie te zetten.... Weet je zeker dat dat gebeurt?

vb:
code:
1
2
3
4
5
6
resultSet = _selectAll.executeQuery();

while(resultSet.next())
{
    result.add(read(resultSet));
}

Hij heeft namelijk bij de eerste read een fout... das verdacht... Als je er een andere voor zet, gaat die waarschijnlijk fout.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
Ik heb dit stuk code al eerder gebruikt, zonder enig probleem. nou ben ik weer wat verder aan het rommelen geweest met mijn code, zonder dat ik die functie heb veranderd. En toch geeft ie een foutmeling op die ene regel :(

WhatPulse! - Rosetta@Home - Docking@Home


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ik zie je trouwens bladeren tot een geselecteerd item... waarom neem je die conditie niet in je query op?

Controleer eens goed hoe het met die nexts zit... daar moet het probleem haast wel zitten...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
Op donderdag 18 oktober 2001 14:28 schreef mbravenboer het volgende:
Voor de eerste resultaat opvraag uit je resultset moet je altijd een .next() gedaan hebben om de pointer op de eerste positie te zetten.... Weet je zeker dat dat gebeurt?
jnlijk fout.
je hebt gelijk, maar ik denk dat dat deze keer niet het geval is.
code:
1
2
3
4
for (int i=0;i<=WerknaamCB.getSelectedIndex();i=i+1)
{
  resultaat.next();
}

Aangezien dat een SelectedIndex van een ComboBox nooit lager als 0 is, en dat betekend dat de for loop altijd minstens 1x uitgevoerd wordt. (als i=0 en WerknaamCD.getSelectedIndex()=0. loop zolang i kleiner of gelijk is aan WerknaamCD.getSelectedIndex())

WhatPulse! - Rosetta@Home - Docking@Home


  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
Op donderdag 18 oktober 2001 14:31 schreef mbravenboer het volgende:
Ik zie je trouwens bladeren tot een geselecteerd item... waarom neem je die conditie niet in je query op?

Controleer eens goed hoe het met die nexts zit... daar moet het probleem haast wel zitten...
Ja, das nog 's een goeie tip. ga ik meteen doen!

[extra info]
Ik heb toch werkadresnummers?
en die moeten van 1 t/m ... zijn. Dus die kan ik ook gebruiken (8>
[/extra info]

WhatPulse! - Rosetta@Home - Docking@Home


  • TrendKiller
  • Registratie: Januari 2001
  • Laatst online: 02-07 13:03
Het kan zijn dat er gewoon geen Results gevonden zijn en dan kan je natuurlijk ook niets uit je ResultSet halen.

BTW gebruik i++ ipv i=i+1 ;)

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
Bedankt voor die geweldige tip, maar nu duikt dezelfde foutmelding weer argens anders op :(
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
        try
        {
        int j=0;
        Connection mycon = DriverManager.getConnection("jdbc:odbc:hurk");
        Statement mystatement = mycon.createStatement();
        ResultSet tellertje = mystatement.executeQuery("SELECT count(*) FROM WerkadresGegevens WHERE Debiteurnummer = "+DebiteurnummerTF.getText());
        tellertje.next();
        j = tellertje.getInt(1);
        tellertje.close();
        ResultSet resultaat = mystatement.executeQuery("SELECT * FROM WerkadresGegevens WHERE Debiteurnummer = "+DebiteurnummerTF.getText()+" ORDER BY Werkadresnummer");
        for (int i=0;i<j;i=i+1)
        {
          resultaat.next();
          WerknaamCB.addItem(resultaat.getString("Naam"));
        }
        resultaat.close();
        mystatement.close();
        mycon.close();
        WerkadresTF.setText("");
        WerkpostcodeTF.setText("");
        WerkplaatsTF.setText("");
        WerkafstandTF.setText("");
        WerkreistijdTF.setText("");
        if (j>0)
        {
          LaatWerkadresZien();
        }
        }
        catch(SQLException ex)
        {
        JOptionPane.showMessageDialog(null,"SQL Exception22: "+ex.getMessage().substring(39),"Fout",JOptionPane.ERROR_MESSAGE);
        }

op de regel: tellertje.next();

WhatPulse! - Rosetta@Home - Docking@Home


  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
Op donderdag 18 oktober 2001 14:48 schreef Trendkiller het volgende:
BTW gebruik i++ ipv i=i+1 ;)
Ik dacht dat da alleen bij C++ gebruikt kon worden ;)

alweer een tip rijker *D

[edit2]
er moet een result instaan, want hij vraagt een COUNT op.
[/edit2]

[edit3]
ben ff weg, tot straks!
[/edit3]

WhatPulse! - Rosetta@Home - Docking@Home


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

als een count 0 is is de resultset volgens mij leeg (of mag leeg zijn)

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
Ik BLIJF steeds die foutmelding terug krijgen. :(
"Fout in functievolgorde"

ik heb geen idee wat ze er mee bedoelen.
wist ik dat olvast maar. misschien dat ik dan zelf de oplossing wel weet.

WhatPulse! - Rosetta@Home - Docking@Home


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Probeer anders eens een andere database als dat mogelijk is. Ik heb zelf vanuit Java onder andere gebruik gemaakt van MS Access, MS SQL Server, MySQL, PostgreSQL en InstantDB en met geen van allen heb ik een serieus probleem als dit gehad...

InstantDB is een dbms geschreven in Java en behoorlijk goed. Het is uitermate makkelijk te installeren (beter gezegd: ke hoeft het niet te installeren ;) ). Uiteraard heeft die dus ook een goede JDBC driver.

MySQL kan ook een goede optie zijn. Ook hiervoor zijn speciale JDBC drivers beschikbaar.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Onno
  • Registratie: Juni 1999
  • Niet online
Op donderdag 18 oktober 2001 15:30 schreef wasigh het volgende:
als een count 0 is is de resultset volgens mij leeg (of mag leeg zijn)
Volgens mij niet. Wel kun je NULL terugkrijgen ipv 0.
Pagina: 1