java.lang.ArrayIndexOutOfBoundsException: 2

Ik probeer java te verbinden met sql. Hoewel ik een newbie ben met javam, kan ik er niet achter komen waarom.

java.lang.ArrayIndexOutOfBoundsException: 2 

Kun je me helpen en me een idee geven hoe ik erachter kan komen?

try{
       Connection con = dbConnection();
       String lname = this.last.getText();
       String fname = this.first.getText();
       String mname = this.mid.getText();
       String ad = this.add.getText();
       String bd = this.bday.getText();
       String ag = this.edad.getText();
       String nom = this.no.getText();
       String per = this.person.getText();
       String query = "INSERT INTO Personal Category    (Lastname,Firstname,Middle,Address,Birthday,Age,No,Person) VALUES (?,?)"; //to insert to database
       PreparedStatement pre;
       pre = con.prepareStatement(query);
       pre.setString(1, lname);
       pre.setString(2, fname);
       pre.setString(3, mname);
       pre.setString(4, ad);
       pre.setString(5, bd);
       pre.setString(6, ag);
       pre.setString(7, nom);
       pre.setString(8, per);
       pre.execute();//execute
       con.close();
    }catch (Exception e){
        System.out.println(e);
    }
}

Antwoord 1, autoriteit 100%

U kunt niet meer eigenschappen voor voorbereide instructies instellen dan ‘?’ in uw zoekopdracht.

“ArrayIndexOutOfBoundsException: 2” betekent dat het faalt bij de derde setString (de interne array is gebaseerd op nul zoals alle Java-arrays), wat normaal is, aangezien je maar twee ‘?’ in de zoekopdracht.

BEWERK:

Er is waarschijnlijk een fout opgetreden vanwege de spatie in uw tabelnaam. Probeer met

INSERT INTO [Personal Category]    (Lastname, ...

Antwoord 2, autoriteit 60%

U heeft slechts twee ?in uw VALUES()-aangifte. Je moet er zoveel hebben als je kolomnamen hebt.

Probeer

String query = "INSERT INTO Personal Category    (Lastname,Firstname,Middle,Address,Birthday,Age,No,Person) VALUES (?,?,?,?,?,?,?,?)"; //to insert to database

Antwoord 3, autoriteit 20%

Je hebt meer vraagtekens nodig – nog zes om precies te zijn.

String query = "INSERT INTO Personal Category    (Lastname,Firstname,Middle,Address,Birthday,Age,No,Person) VALUES (?,?,?,?,?,?,?,?)";

JDBC interpreteert elk vraagteken als een tijdelijke aanduiding voor een parameter, d.w.z. een belofte van uw programma om een waarde op te geven na het opstellen van de verklaring. Wanneer u setString, setInt, setLong, enz. op uw voorbereide afschrift aanroept, moet er een overeenkomstige genummerde tijdelijke aanduiding bestaan. Anders wordt java.lang.ArrayIndexOutOfBoundsExceptiongegenereerd.


Antwoord 4

U moet evenveel tijdelijke aanduidingen (?) hebben als het aantal parameters dat aan die INSERT-instructie moet worden doorgegeven.

String query = "INSERT INTO PersonalCategory (Lastname, Firstname, Middle, " + 
"Address, Birthday, Age, No, Person) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"

Antwoord 5

String query = "INSERT INTO Personal Category (Lastname,Firstname,Middle,Address,Birthday,Age,No,Person) VALUES (?,?)";

Het probleem zit in het Aantal argumenten dat moet worden doorgegeven in de VALUES. U hebt slechts 2 argumenten doorgegeven waar het 8 moet zijn


Antwoord 6

je hebt het antwoord op het probleem “ArrayIndexOutOfBound”. Ik zal je tweede vraag “SQLException” beantwoorden en wat advies geven om je code te verbeteren.

Die SQLException gebeurt omdat je tabelnaam denk ik. Er staan 2 woorden in je tabelnaam en dat kan de compiler verwarren.

Advies

  1. u voert prepareStatement uit zonder de uitvoerwaarde te vangen. Het geeft je een booleaanse waarde als uitvoer. Alleen dan kun je zien wat voor soort dingen zijn uitgevoerd.

  2. Hier lijkt het alsof u ALLEEN gegevens INVOERT, en u weet zeker dat u ALLEEN GEGEVENS INVOERT. Dus, als dat zo is, gebruik dan executeUpdate() in plaats van execute() methode.

  3. Sluit de verbinding altijd binnen een definitief()-blok. Op deze manier kunt u er altijd voor zorgen dat de verbinding wordt gesloten, of de code nu mislukt of niet. Door dit te doen, wordt de database-rush soepel beheerd, door geen onnodige verbindingen open te houden.

Laten we bij goede software-engineeringconcepten blijven 🙂

Other episodes