java.lang.ArrayIndexOutOfBoundsException:2

时间:2012-09-24 16:22:37

标签: java

我正在尝试将java连接到sql。虽然我是javam的新手但我似乎无法找到原因。

java.lang.ArrayIndexOutOfBoundsException: 2 

你能帮助我,让我知道如何弄明白吗?

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);

    }

}

5 个答案:

答案 0 :(得分:5)

你不能设置比你有更多的预备语句属性'?'在你的查询中。

“ArrayIndexOutOfBoundsException:2”表示它在第三个setString失败(内部数组从零开始为所有java数组),这是正常的,因为你只有两个'?'在查询中。

编辑:

由于表名中的空格,您可能会遇到错误。试试

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

答案 1 :(得分:3)

您的?声明中只有两个VALUES()。您需要拥有尽可能多的列名。

尝试

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

答案 2 :(得分:1)

你需要更多的问号 - 确切地说还有六个问号。

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

JDBC将每个问号解释为参数的占位符,即程序在准备语句后提供值的承诺。当您在准备好的声明中致电setStringsetIntsetLong等时,必须存在相应的编号占位符。否则,抛出java.lang.ArrayIndexOutOfBoundsException

答案 3 :(得分:0)

您应该拥有与要传递给该INSERT语句的参数数量一样多的占位符(?)。

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

答案 4 :(得分:0)

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

问题在于要在VALUES中传递的参数数量,您只传递了2个参数,其中需要为8。