我正在尝试将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);
}
}
答案 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将每个问号解释为参数的占位符,即程序在准备语句后提供值的承诺。当您在准备好的声明中致电setString
,setInt
,setLong
等时,必须存在相应的编号占位符。否则,抛出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。