Ошибка: индекс параметра вне диапазона (39> число параметров, которое составляет 38) - PullRequest
0 голосов
/ 20 сентября 2019

Я получаю эту ошибку в динамическом Java-проекте.

java.sql.SQLException: индекс параметра вне диапазона (39> число параметров, что составляет 38).

Я проверил, что число столбцов в БД равно 38, "?"количество символов равно 38, число полей равно 38, число myStmt.set равно 38, но я все еще получаю эту ошибку.Я пытаюсь написать 3 таблицы в MySQL, я полагаю, мой метод неверен, не могли бы вы мне помочь, пожалуйста?

try {
        myConn = getConnection();

        String sql = "insert into hodo (find_registry, title, name, surname, first_surname, start_date, structure_start_date, termination_date, mission_code, mission, " 
                + "profession_code, account_code, group_code, faculty_institute_hospital, department_unit, work_status, sgk_status, sgk_document_type, sgk_law, sgk_no, "
                + "detail_code, tc_no, father_name, mother_name, nationality, birth_place, birth_date, gender, blood_group, city, "
                + "county, district, marital_status, address, gsm_no, email, agi_information, lesson_load)"
                + " values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

        myStmt = myConn.prepareStatement(sql);


        myStmt.setString(1, thePerson.getFind_registry());
        myStmt.setString(2, thePerson.getTitle());
        myStmt.setString(3, thePerson.getName());
        myStmt.setString(4, thePerson.getSurname());
        myStmt.setString(5, thePerson.getFirst_surname());
        myStmt.setDate(6, new java.sql.Date(thePerson.getStart_date().getTime()));
        myStmt.setDate(7, new java.sql.Date(thePerson.getStructure_start_date().getTime()));
        myStmt.setDate(8, new java.sql.Date(thePerson.getTermination_date().getTime()));
        myStmt.setString(9, thePerson.getMission_code());
        myStmt.setString(10, thePerson.getMission());
        myStmt.setString(11, thePerson.getProfession_code());
        myStmt.setString(12, thePerson.getAccount_code());
        myStmt.setString(13, thePerson.getGroup_code());
        myStmt.setString(14, thePerson.getFaculty_institute_hospital());
        myStmt.setString(15, thePerson.getDepartment_unit());
        myStmt.setString(16, thePerson.getWork_status());
        myStmt.setString(17, thePerson.getSgk_status());
        myStmt.setString(18, thePerson.getSgk_document_type());
        myStmt.setString(19, thePerson.getSgk_law());
        myStmt.setString(20, thePerson.getSgk_no());
        myStmt.setString(21, thePerson.getDetail_code());
        myStmt.setString(22, thePerson.getTc_no());
        myStmt.setString(23, thePerson.getFather_name());
        myStmt.setString(24, thePerson.getMother_name());
        myStmt.setString(25, thePerson.getNationality());
        myStmt.setString(26, thePerson.getBirth_place());
        myStmt.setDate(27, new java.sql.Date(thePerson.getBirth_date().getTime()));
        myStmt.setString(28, thePerson.getGender());
        myStmt.setString(29, thePerson.getBlood_group());
        myStmt.setString(30, thePerson.getCity());
        myStmt.setString(31, thePerson.getCounty());
        myStmt.setString(32, thePerson.getDistrict());
        myStmt.setString(33, thePerson.getMarital_status());
        myStmt.setString(34, thePerson.getAddress());
        myStmt.setString(35, thePerson.getGsm_no());
        myStmt.setString(36, thePerson.getEmail());
        myStmt.setString(37, thePerson.getAgi_information());
        myStmt.setString(38, thePerson.getLesson_load());

        myStmt.execute();

        myConn2 = getConnection();

        String sql2 = "insert into modo (name, surname, tc_no, person_type, nationality, birth_date, structure_start_date, termination_date, father_name, mother_name, "
                + "marital_status, blood_group, birth_place, city, county, district, registry_place, first_surname, registry_no, work_status, work_manner, title, "
                + " employment_situation, mission_code, profession_code, payroll_expense_center, wage_account_code, wage_type, mandatory_lesson_load, work_period_start_date, "
                + "start_date, agi, mandatory_bes_rate, health_insurance_status, document_type, bank_account_no, bank_no, branch_no, bounded_place, staff_status, phone, email, "
                + "address_type, post_code, county_name, address_detail, title_given_corporation, readership_field, readership_date, upsize_designation_date, "
                + "upsize_designation_status, mission_name, mission_place, is_noble, mission_status, ssk_registry_no, position, attending_insurance_branch, "
                + "item30_working_type, fraction_defective, closeness_degree, gender, is_agi)"
                + "values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

        myStmt2 = myConn2.prepareStatement(sql);

        myStmt2.setString(1, thePerson.getName());
        myStmt2.setString(2, thePerson.getSurname());
        myStmt2.setString(3, thePerson.getTc_no());
        myStmt2.setString(4, thePerson.getPerson_type());
        myStmt2.setString(5, thePerson.getNationality());
        myStmt2.setDate(6, new java.sql.Date(thePerson.getBirth_date().getTime()));
        myStmt2.setDate(7, new java.sql.Date(thePerson.getStructure_start_date().getTime()));
        myStmt2.setDate(8, new java.sql.Date(thePerson.getTermination_date().getTime()));
        myStmt2.setString(9, thePerson.getFather_name());
        myStmt2.setString(10, thePerson.getMother_name());
        myStmt2.setString(11, thePerson.getMarital_status());
        myStmt2.setString(12, thePerson.getBlood_group());
        myStmt2.setString(13, thePerson.getBirth_place());
        myStmt2.setString(14, thePerson.getCity());
        myStmt2.setString(15, thePerson.getCounty());
        myStmt2.setString(16, thePerson.getDistrict());
        myStmt2.setString(17, thePerson.getRegistry_place());
        myStmt2.setString(18, thePerson.getFirst_surname());
        myStmt2.setString(19, thePerson.getRegistry_no());
        myStmt2.setString(20, thePerson.getWork_status());
        myStmt2.setString(21, thePerson.getWork_manner());
        myStmt2.setString(22, thePerson.getTitle());
        myStmt2.setString(23, thePerson.getEmployment_situation());
        myStmt2.setString(24, thePerson.getMission_code());
        myStmt2.setString(25, thePerson.getProfession_code());
        myStmt2.setString(26, thePerson.getPayroll_expense_center());
        myStmt2.setString(27, thePerson.getWage_account_code());
        myStmt2.setString(28, thePerson.getWage_type());
        myStmt2.setString(29, thePerson.getMandatory_lesson_load());
        myStmt2.setDate(30, new java.sql.Date(thePerson.getWork_period_start_date().getTime()));
        myStmt2.setDate(31, new java.sql.Date(thePerson.getStart_date().getTime()));
        myStmt2.setString(32, thePerson.getAgi());
        myStmt2.setString(33, thePerson.getMandatory_bes_rate());
        myStmt2.setString(34, thePerson.getHealth_insurance_status());
        myStmt2.setString(35, thePerson.getDocument_type());
        myStmt2.setString(36, thePerson.getBank_account_no());
        myStmt2.setString(37, thePerson.getBank_no());
        myStmt2.setString(38, thePerson.getBranch_no());
        myStmt2.setString(39, thePerson.getBounded_place());
        myStmt2.setString(40, thePerson.getStaff_status());
        myStmt2.setString(41, thePerson.getPhone());
        myStmt2.setString(42, thePerson.getEmail());
        myStmt2.setString(43, thePerson.getAddress_type());
        myStmt2.setString(44, thePerson.getPost_code());
        myStmt2.setString(45, thePerson.getCounty_name());
        myStmt2.setString(46, thePerson.getAddress_detail());
        myStmt2.setString(47, thePerson.getTitle_given_corporation());
        myStmt2.setString(48, thePerson.getReadership_field());
        myStmt2.setDate(49, new java.sql.Date(thePerson.getReadership_date().getTime()));
        myStmt2.setDate(50, new java.sql.Date(thePerson.getUpsize_designation_date().getTime()));
        myStmt2.setString(51, thePerson.getUpsize_designation_status());
        myStmt2.setString(52, thePerson.getMission_name());
        myStmt2.setString(53, thePerson.getMission_place());
        myStmt2.setString(54, thePerson.getIs_noble());
        myStmt2.setString(55, thePerson.getMission_status());
        myStmt2.setString(56, thePerson.getSsk_registry_no());
        myStmt2.setString(57, thePerson.getPosition());
        myStmt2.setString(58, thePerson.getAttending_insurance_branch());
        myStmt2.setString(59, thePerson.getItem30_working_type());
        myStmt2.setString(60, thePerson.getFraction_defective());
        myStmt2.setString(61, thePerson.getCloseness_degree());
        myStmt2.setString(62, thePerson.getGender());
        myStmt2.setString(63, thePerson.getIs_agi());

        myStmt2.execute();

        myConn3 = getConnection();

        String sql3 = "insert into kodo (name, surname, nationality, person_type, sgk_type, title, gender, marital_status, blood_group, trainer_type, registry_no, "
                + "corporation, sub_unit, department, working_type, continuation_type, start_date, end_date, active, mernis_no, country_code, city_code, county, district, birth_place, "
                + "birth_date, father_name, mother_name) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

        myStmt3 = myConn3.prepareStatement(sql);

        myStmt3.setString(1, thePerson.getName());
        myStmt3.setString(2, thePerson.getSurname());
        myStmt3.setString(3, thePerson.getNationality());
        myStmt3.setString(4, thePerson.getPerson_type());
        myStmt3.setString(5, thePerson.getSgk_type());
        myStmt3.setString(6, thePerson.getTitle());
        myStmt3.setString(7, thePerson.getGender());
        myStmt3.setString(8, thePerson.getMarital_status());
        myStmt3.setString(9, thePerson.getBlood_group());
        myStmt3.setString(10, thePerson.getTrainer_type());
        myStmt3.setString(11, thePerson.getRegistry_no());
        myStmt3.setString(12, thePerson.getCorporation());
        myStmt3.setString(13, thePerson.getSub_unit());
        myStmt3.setString(14, thePerson.getDepartment());
        myStmt3.setString(15, thePerson.getWorking_type());
        myStmt3.setString(16, thePerson.getContinuation_type());
        myStmt3.setDate(17, new java.sql.Date(thePerson.getStart_date().getTime()));
        myStmt3.setDate(18, new java.sql.Date(thePerson.getEnd_date().getTime()));
        myStmt3.setString(19, thePerson.getActive());
        myStmt3.setString(20, thePerson.getMernis_no());
        myStmt3.setString(21, thePerson.getCountry_code());
        myStmt3.setString(22, thePerson.getCity_code());
        myStmt3.setString(23, thePerson.getCounty());
        myStmt3.setString(24, thePerson.getDistrict());
        myStmt3.setString(25, thePerson.getBirth_place());
        myStmt3.setDate(26, new java.sql.Date(thePerson.getBirth_date().getTime()));
        myStmt3.setString(27, thePerson.getFather_name());
        myStmt3.setString(28, thePerson.getMother_name());

        myStmt3.execute();

    }


    finally {
        close (myConn, myStmt);
        close (myConn2, myStmt2);
        close (myConn3, myStmt3);
    }

1 Ответ

1 голос
/ 21 сентября 2019

Ваш код содержит строку

      myStmt2 = myConn2.prepareStatement(sql);

Я думаю, что вы хотите написать

      myStmt2 = myConn2.prepareStatement(sql2);  // note: sql2 not sql

В противном случае вы снова готовите первый оператор SQL и устанавливаете в него параметры, как если бы он былвторой.

То же самое происходит с

      myStmt3 = myConn3.prepareStatement(sql);

. Здесь вы хотите sql3 вместо sql.

Попробуйте извлечь каждую операцию SQL в отдельные методы.Во-первых, это уменьшит размер вашего метода.С другой стороны, вы быстро найдете ошибку: строка SQL для первого оператора будет выходить за рамки второго метода.Кроме того, я не уверен, для чего вы пишете свой код: любая интегрированная среда разработки предупредит вас, что ваши переменные sql2 и sql3 не используются.

...