Member 12388676 Ответов: 1

Привет я продолжаю получать эту ошибку в моей базе данных java


   private void storeBttnActionPerformed(java.awt.event.ActionEvent evt) {                                          


        try
		{
                    System.out.println(passIdTextField.getText());
			 int  s1 =Integer.parseInt(passIdTextField.getText().trim());
			 String s2 = nameTextField.getText();
                         String s3 = malejCheckBox1.getText();
                         String s4 = femalejCheckBox2.getText();
                         int s5 = Integer.parseInt(phoneNumTextField.getText().trim());
                         String s6 = emailTextField.getText();
                         String s7   =address1TextField.getText();
                         String s8  = address2TextField.getText();
                         String s9 = cityTextField.getText();
                         String s10 =countyTextField.getText();
                         String s11 = fromComboBox.getSelectedItem().toString();
                         String s12 = toComboBox.getSelectedItem().toString();
                         String s13 =  departTextField.getText();
                         String s14=  arrivalTextField.getText();
                         int s15 = Integer.parseInt(adultTextField.getText().trim());
                         int s16 = Integer.parseInt(childrenTextField.getText().trim());
                         String s17 = classTextField.getText();
                         int s18 = Integer.parseInt(seatsTextField.getText().trim());
                         int s19 = Integer.parseInt(priceTextField.getText().trim());
                         int s20 = Integer.parseInt(lengthStayjTextField1.getText().trim());
                         int s21 = Integer.parseInt(cardNumTextField.getText().trim());
                         int s22 = Integer.parseInt(securityTextField.getText().trim());
                         int s23 = Integer.parseInt(ExpDatejTextField1.getText().trim());
                         
                         
                   
                        
             
                
                
                ///fix this here in order 
        
    System.out.println(s1+ s2 +s3 +s4 +s5 +s6 +s7 +s8 +s9 +s10 +s11 +s12 +s13 +s14 +s15  +s16 +s17+s18+s19+s20+s21+s22+s23);
    String newAir = "INSERT INTO Ticket(PassengerId, Name,Gender, Number, Email, Address1, Address2, City, County, From, To, DepartDate, ArrivalDate,Adult,Children,Class, Seats, Price, LengthStay,CardNumber,SecurityCode, ExpDate  )VALUES('"+s1+"', '"+s2+"','"+s3+"','"+s4+"', '"+s5+"','"+s6+"','"
        + ""+s7+"', '"+s8+"','"+s9+"','"+s10+"', '"+s11+"','"+s12+"','"
        + ""+s13+"', '"+s14+"','"+s15+"','"+s16+"', '"+s17+"','"+s18+"','"+s19+"','"+s20+"','"+s21+"','"+s22+"','"+s23+"')";

    stmt.executeUpdate(newAir);
    
    
System.out.println(newAir);

                        

			System.out.println(s1 + " stored in database");
                  
		}
		catch(SQLException e) {System.out.println("Error in creating new  row in database");
                count++;
                e.printStackTrace();}
                       
       

        // TODO add your handling code here:
    }                     


Что я уже пробовал:

я пытался инициализировать все это как строку и целые числа, но это продолжает давать мне эту ошибку
ucanaccess.jdbc.UcanaccessSQLException: несоответствие количества столбцов строк
в Net.ucanaccess.с JDBC.UcanaccessStatement.executeUpdate(UcanaccessStatement. java:211)

когда я нажимаю кнопку store я не понимаю она работает но затем падает когда я нажимаю store и я дважды проверил все ли правильно написано в моей базе данных

Richard MacCutchan

Почему вы используете строки для гендерного поля? Используйте значение bool (или int, чтобы учесть современную тенденцию множества полов). Кроме того, у вас есть одно поле базы данных для пола, но вы пытаетесь вставить s3 и s4. У вас также нет проверок на наличие недопустимых символов в числовых полях, так что это может привести к сбою вашего кода. И, наконец, использование конкатенированных строк для команд базы данных оставляет вашу базу данных открытой для SQL-инъекции и потери всех ваших данных.

1 Ответов

Рейтинг:
0

Patrice T

Цитата:
ucanaccess.jdbc.UcanaccessSQLException: несоответствие количества строк столбцов в Net.ucanaccess.с JDBC.UcanaccessStatement.executeUpdate(UcanaccessStatement. java:211)
Сообщение довольно ясное, количество значений не совпадает с количеством полей. Ваш insert попробуйте записать 23 значения в 22 поля.

Совет: никогда не создавайте SQL-запрос путем конкатенации строк в открытых дверях для атаки под названием SQL-инъекция.
SQL-инъекция[^]
SQL-инъекция-Википедия[^]

[Обновление]
Цитата:
это из-за s3 и s4, поскольку у меня есть как женский, так и мужской пол
Да, вы должны найти Ват, чтобы объединить malejCheckBox1 и femalejCheckBox2 в 1 пол стоимости.


Member 12388676

это из-за s3 и s4, поскольку у меня есть как женский, так и мужской пол

Member 12388676

каким способом я могу идти о fixig, что

Member 12388676

я понял это, но jst не понимаю, как бы я это исправил, если бы все остальные таблицы были заполнены