Too few parameters. Expected 1.

Status
Niet open voor verdere reacties.

Warranty

Gebruiker
Lid geworden
3 nov 2006
Berichten
100
Too few parameters. Expected 1.

Die melding krijg ik dus bij de volgende SQL code:

Code:
ResultSet rshgnr = HGNR.executeQuery("SELECT * FROM Hoofdgroep where Hoofdgroep = " + HoofdgroepItem + "");

Iemand die me kan helpen? Ik heb al van alles geprobeert!
 
Heb je alles in je query goed gespeld? Heet de tabel wel precies 'Hoofdgroep'?

En wat bedoel je precies met het WHERE deel van je query? Heeft je tabel die Hoofdgroep heet ook nog een kolom genaamd Hoofdgroep?
 
Ik heb alles 10 keer gecontroleerd en helaas is het niet een spelfout. De tabel heeft "Hoofdgroep" heeft inderdaad ook nog een kolom "Hoofdgroep". Ik heb ook al geprobeert deze kolom HGG te noemen bijvoorbeeld en het in mijn code ook aan te passen maar helaas, zonder succes.

De vorige keren dat ik deze melding kreeg (Too few parameters) lag het altijd aan de gegevens in de database of een foute kolomnaam ofzo inderdaad. Maar dit keer kan ik echt niks bedenken.
 
Heb je al geprobeerd om de waarde 'Hoofdgroepitem' tussen enkele quotes te zetten? Dus de quotes ook in de SQL query meesturen.
 
EDIT:
Zie mijn volgende bericht voordat je deze gaat lezen.

Ook geen succes helaas. Ik zal wat meer van de code plaatsen.

Alle Hoofdgroepen uit de database halen
Code:
                    Statement HG = conn.createStatement();
                    ResultSet rshg = HG.executeQuery("SELECT Hoofdgroep FROM Hoofdgroep");

Alle hoofdgroepen in de ComboBox zetten
Code:
                while (rshg.next())
                {
                //Hoofdgroep in ComboBox
                    String Hoofdgroep = rshg.getString("Hoofdgroep");
                    cbHoofdgroep.addItem(Hoofdgroep);
                }

De ComboBox
Code:
        contentPane.add(cbHoofdgroep);
        cbHoofdgroep.setBounds(375, 20, 125, 20);
        cbHoofdgroep.addActionListener( new cbHoofdgroepHandler() );

De ActionListener voor de ComboBox
Code:
    class cbHoofdgroepHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {

            //JComboBox cbHoofdgroep = (JComboBox)e.getSource();
            HoofdgroepItem = (String)cbHoofdgroep.getSelectedItem();

            try {
                       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
                       Connection conn = DriverManager.getConnection(
                                   "jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb);DBQ=c:/Melding.mdb;");

                  //System.out.println(HoofdgroepItem);

                  String hgg = HoofdgroepItem;

                  System.out.println(hgg);

                  Statement HGNR = conn.createStatement();
                  ResultSet rshgnr = HGNR.executeQuery("SELECT HG-ID FROM Hoofdgroep where Hoofdgroep = " + hgg + "");

                  //String HGID = rshgnr.getString("HG-ID");

                  //System.out.println(HGID);

                  }

                  catch (Exception exception)
                  {
                      exception.printStackTrace();
                  }
        }
    }
 
Laatst bewerkt:
In plaats van
Code:
ResultSet rshgnr = HGNR.executeQuery("SELECT HG-ID FROM Hoofdgroep where Hoofdgroep = " + hgg + "");

Heb ik nu
Code:
                  ResultSet rshgnr = HGNR.executeQuery(
                            "SELECT * FROM Hoofdgroep where Hoofdgroep = '" +hgg+ "' ");

En nu werkt het.

Alleen nu heb ik het volgende probleem. Als ik het resultaat daarna wil laten zien:
Code:
                  String HGIDNR = rshgnr.getString("HGID");

                  System.out.println(HGIDNR);

Zegt hij:
Code:
java.sql.SQLException: Column not found

Vreemd, want de column HGID bestaat zeker weten en is gevuld met een autonummering veld die tot nu toe tot 6 is gevuld.
 
Laatst bewerkt:
en als je nou de quots anders doet.
HGNR.executeQuery("SELECT `HG-ID` FROM `Hoofdgroep` WHERE `Hoofdgroep` = " + hgg);
 
Het is af te raden op deze manier SQL statements op te bouwen...

Schrijf je SQL als volgt:

PreparedStatement stmt = cnn.prepareStatement("SELECT HG-ID FROM Hoofdgroep where Hoofdgroep.veldnaam = ?");

stmt.setString(1, hgg );

ResultSet result = stmt.executeQuery();

Zo zorg je ervoor dat je code veilig is tegen 'sql injection' en bovendien is het veel makkelijker eenmaal je deze manier van werken gewoon bent.
Bovendien vergat je de veldnaam op te geven die gelijk diende te zijn aan hgg...
 
Het is af te raden op deze manier SQL statements op te bouwen...

Schrijf je SQL als volgt:

PreparedStatement stmt = cnn.prepareStatement("SELECT HG-ID FROM Hoofdgroep where Hoofdgroep.veldnaam = ?");

stmt.setString(1, hgg );

ResultSet result = stmt.executeQuery();

Zo zorg je ervoor dat je code veilig is tegen 'sql injection' en bovendien is het veel makkelijker eenmaal je deze manier van werken gewoon bent.
Bovendien vergat je de veldnaam op te geven die gelijk diende te zijn aan hgg...

Ten eerste weet ik eigenlijk niet wat 'sql injection' is en hoewel het allemaal best logisch klinkt, zou het evengoed moeten werken op mijn manier.

Wat versta jij trouwens onder een veldnaam? Ik hoef alleen een kolom naam op te geven in mijn ervaring?
 
Wat ik versta onder veldnaam...

Wel je hebt de tabelnaam.
En in een tabel heb je meerdere 'velden' of 'kolommen'...

Jij schrijft:
SELECT * FROM Hoofdgroep where Hoofdgroep = " + HoofdgroepItem + ""

Hoe moet je programma weten welke kolom gelijk moet zijn aan HoofdgroepItem ??
Ik ken de veldnaam niet, maar stel dat de kolom hoofdgroepitemkolomnaam heet, dan dien je te schrijven:

SELECT * FROM Hoofdgroep where Hoofdgroep.hoofdgroepitemkolomnaam = " + HoofdgroepItem + ""
 
Ik ben niet zo thuis in Java maar wel in VB en als ik hier naar kijk:
Code:
ResultSet rshgnr = HGNR.executeQuery("SELECT * FROM Hoofdgroep where Hoofdgroep = " + HoofdgroepItem + "");

Dan lijkt mij dat je een probleem krijgt bij de eerste +

Probeer eens iets als
Code:
ResultSet rshgnr = HGNR.executeQuery("SELECT * FROM Hoofdgroep where Hoofdgroep = [B]'[/B] " + HoofdgroepItem + "[B]'[/B]");

Omdat HoofdgroepItem anders als een variabele wordt gezien en niet als string
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan