Java 创建一个学生,将其传递给SQL对象,并在thread中获取异常;AWT-EventQueue-0“;lang.ArrayIndexOutofBounds异常:4
大家好,我的Java代码有问题。说到Java,我是个新手,我喜欢Java。到目前为止,我正在使用netbeans用java开发一个桌面应用程序,遇到了一个运行时错误。有人能帮我写这段代码吗。问题是什么 线程“AWT-EventQueue-0”lang.ArrayIndexOutofBounds异常:4 等等。假设Student对象具有正确的值,我已经测试了Student对象的完整条目,但仍然存在问题。我的嫌疑犯在准备好的声明中,有人能指出我的代码的确切位置吗。Tnx和问候Java 创建一个学生,将其传递给SQL对象,并在thread中获取异常;AWT-EventQueue-0“;lang.ArrayIndexOutofBounds异常:4,java,arrays,swing,sqlite,jdbc,Java,Arrays,Swing,Sqlite,Jdbc,大家好,我的Java代码有问题。说到Java,我是个新手,我喜欢Java。到目前为止,我正在使用netbeans用java开发一个桌面应用程序,遇到了一个运行时错误。有人能帮我写这段代码吗。问题是什么 线程“AWT-EventQueue-0”lang.ArrayIndexOutofBounds异常:4 等等。假设Student对象具有正确的值,我已经测试了Student对象的完整条目,但仍然存在问题。我的嫌疑犯在准备好的声明中,有人能指出我的代码的确切位置吗。Tnx和问候
fname = student.getFirst_name();
student.getLast_name();
age = student.getAge();
student.getGender();
email_address = student.getEmail_add();
student_id= student.getStudent_id();
level= student.getLevel();
room = student.getRoom();
date_birth = student.getDate_birth();
home_phone_number = student.getHome_phone();
mobile_number = student.getMobile_phone();
street = student.getStreet();
city = student.getCity();
state_province = student.getState_province();
zip_postal_codes = student.getZip_postal();
notes = student.getNotes();
String SQL = "UPDATE tbl_students SET first_name ='?', last_name = '?', age = 22, gender = '?', email_address='?',student_id = ?, level = '?', room = '?', date_of_birth='?', home_phone_number= ?, mobile_number = ?, street='?', city='?', state_province ='?', zip_postal_code=?, notes = '?' where student_id =" + student_id;
String fname = student.getFirst_name();
String lname = student.getLast_name();
int age = student.getAge();
String gender = student.getGender();
String email_address = student.getEmail_add();
int student_id= student.getStudent_id();
String level= student.getLevel();
String room = student.getRoom();
String date_birth = student.getDate_birth();
int home_phone_number = student.getHome_phone();
int mobile_number = student.getMobile_phone();
String street = student.getStreet();
String city = student.getCity();
String state_province = student.getState_province();
int zip_postal_codes = student.getZip_postal();
String notes = student.getNotes();
DBMS.CreateConn();
Connection conn;
conn =DBMS.CreateConn();
PreparedStatement pst = conn.prepareStatement(SQL);
pst.setString(1, fname);
pst.setString(2, lname);
pst.setInt(3, age);
pst.setString(4, gender);
pst.setString(5, email_address);
pst.setInt(6, student_id);
pst.setString(7,level);
pst.setString(8, room);
pst.setString(9, date_birth);
pst.setInt(10, home_phone_number);
pst.setInt(11, mobile_number);
pst.setString(12, street);
pst.setString(13, city);
pst.setString(14, state_province);
pst.setInt(15, zip_postal_codes);
pst.setString(16, notes);
int result = pst.executeUpdate();
您必须删除查询中
?
周围的所有,
,否则它们不会被算作参数,而是问号的实际字符串
String SQL = "UPDATE tbl_students SET first_name =?, last_name = ?, age = 22, gender = ?, email_address=?,student_id = ?, level = ?, room = ?, date_of_birth=?, home_phone_number= ?, mobile_number = ?, street=?, city=?, state_province =?, zip_postal_code=?, notes = ? where student_id =" + student_id;
发生此错误的原因是,您当前正好有4个不带引号的问号,这意味着四个参数,这意味着将参数0设置为3的调用成功,但将其设置为索引4是不允许的
顺便问一下,为什么不为
where
条件值使用参数?您还应该在后台线程中进行调用。异常发生在eventthread(AWT-EventQueue-0)中。这就是我们的底线。切勿将其用于长时间处理或DB调用等。请注意,从技术上讲,这是一个错误,因为在这种情况下,驱动程序应引发SQLException。@MarkRotVeel您的意思是,它在调用conn.prepareStatement
时应引发异常?否,setXXX
方法应该抛出一个SQLException
而不是ArrayIndexOutOfBoundsException
@markrotterveel,我同意它应该处理得更好。lib的用户不必知道/理解存储在数组中的参数,应该显式地检查并相应地处理边界。我不认为SQLException
会更好,我更喜欢IllegalArgumentException
带有详细错误消息“试图设置参数5,而语句中只指定了4个参数”它必须是SQLException
(或其子类之一),因为这是JDBC规范和API所需要的。请参阅:“SQLException-如果parameterIndex与SQL语句中的参数标记不对应”
String SQL = "UPDATE tbl_students SET first_name =?, last_name = ?, age = 22, gender = ?, email_address=?,student_id = ?, level = ?, room = ?, date_of_birth=?, home_phone_number= ?, mobile_number = ?, street=?, city=?, state_province =?, zip_postal_code=?, notes = ? where student_id =" + student_id;