java. sql .SQLException: MONTH - PullRequest
0 голосов
/ 21 марта 2020

, пожалуйста, помогите для моего задания, поэтому я создаю java программу / папку, которая имеет функцию автоматического вычисления возраста и использует JCalendar (JDatechooser). До сих пор я установил в качестве даты-формата моей строки jdatechooser значение "yyyy-MM-dd", поэтому моя проблема заключается в вставке выбранной даты в мой sql я устанавливаю столбец даты рождения в качестве даты типа данных, используя, конечно, пример кода JButton:

String query = "insert into walkin (FirstName, MiddleName, Surname, Birthdate, age, gender, address, contact) values (?,?,?,?,?,?,?,?) ";   
    ps = con.prepareStatement(query);      
    ps.setString(1, tfname.getText());   
    ps.setString(2, tmname.getText());   
    ps.setString(3, tsname.getText());    
    ps.setString(4, ((JTextField)date.getDateEditor().getUiComponent()).getText());   
    ps.setString(5, tage.getText());
    ps.setString(6, genderr);   
    ps.setString(7, tadd.getText());  
    ps.setString(8, tcont.getText());
    ps.execute();        
    JOptionPane.showMessageDialog(null, "Data Saved");         
    ps.close();        
    }           

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Умные объекты, а не тупые строки

Передача объектов соответствующего типа в вашу базу данных. В случае строки даты, проанализируйте как объект LocalDate. Затем передайте этот объект LocalDate в подготовленный оператор, используя setObject, используя JDB C драйвер с поддержкой JDB C 4.2 или более поздней версии.

Итак, ваша строка:

ps.setString(4, ((JTextField)date.getDateEditor().getUiComponent()).getText());   

… должна быть:

String dateInput = (JTextField)date.getDateEditor().getUiComponent()).getText() ;
LocalDate ld = LocalDate.parse( dateInput ) ;
ps.setString( 4 , ld ) ;

Если получена неправильная входная строка, LocalDate.parse команда выбрасывает DateTimeParseException.

1 голос
/ 21 марта 2020

Mysql может конвертировать строку в формате 'гггг-мм-дд' в DATE и вставлять в таблицы. Следовательно, ваши ожидания кажутся правильными.

Сначала жестко запишите дату (как показано ниже) и запустите свой код, чтобы увидеть, успешно ли mysql обрабатывает вставку и правильно ли записаны остальные значения.

ps.setString(4, '2020-01-31');  

Если это работает хорошо, тогда ясно, что возвращенная информация из вашего виджета не в правильном формате, попробуйте выяснить, что она возвращает, напечатав ее следующим образом go оттуда.

System.out.println((JTextField)date.getDateEditor().getUiComponent()).getText());
...