Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建一个学生,将其传递给SQL对象,并在thread中获取异常;AWT-EventQueue-0“;lang.ArrayIndexOutofBounds异常:4_Java_Arrays_Swing_Sqlite_Jdbc - Fatal编程技术网

Java 创建一个学生,将其传递给SQL对象,并在thread中获取异常;AWT-EventQueue-0“;lang.ArrayIndexOutofBounds异常:4

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和问候

大家好,我的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;