Как сохранить и получить нулевую дату из MySQL базы данных с помощью jdatechooser

Я разрабатываю простую систему управления больницами для моего проекта с NetBeans, так что вот моя проблема вкратце. Когда пациент поступает и выписывается из больницы, его / ее дата госпитализации и дата выписки должны быть записаны. поэтому я поставил два jDateChoosers для приема и выписки. Поэтому, когда новый пациент признается, я должен оставить дату выписки jDateChooser пустой и сохранить.

  • Я изменил формат даты jDateChoosers на "yyyy-MM-dd"

  • (Я использую mysql control center 0.9.4 для создания своей базы данных и таблиц). Сначала я попытался сохранить дату, изменив тип данных столбца выгрузки (dod) на 'date', а затем возникла исключительная ситуация.

    com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data truncated for column 'dod' at row

  • Затем я попытался изменить тип данных на 'varchar' и допустил нулевые значения, без проблем на этот раз он сохранил пустое значение в БД.

  • При получении информации о пациентах я кодировал дату поступления и выписки, чтобы они появлялись в двух jDateChoosers по отдельности. но исключение генерирует так

    java.text.ParseException: Непонятная дата: "" в java.text.DateFormat.parse(DateFormat.java:357) в Patient.pidKeyReleased(Patient.java:455) в Patient.access$000(Patient.java:23) в Пациент $1.keyReleased(Patient.java:118) в java.awt.Component.processKeyEvent(Component.java:6466)

Это код и импорт, связанные с проблемой даты:

import java.text.DateFormat;  
import java.text.SimpleDateFormat;  
import java.util.Date;`

Это закодировано в кнопке сохранения

try {
        Statement stmt = connection.hosp().createStatement();
        String dt = ((JTextField)doa.getDateEditor().getUiComponent()).getText();
        String dt1 = ((JTextField)dod.getDateEditor().getUiComponent()).getText();

        stmt.executeUpdate("insert into patients values ('"+pid.getText()+"','"+nic.getText()+"','"+fname.getText()+"','"+lname.getText()+"','"+age.getText()+"','"+address.getText()+"','"+contact.getText()+"','"+ptype.getSelectedItem()+"','"+wardname.getText()+"','"+wardno.getText()+"','"+roomno.getText()+"','"+diagnosis.getText()+"','"+doctor.getText()+"','"+consultant.getText()+"','"+dt+"','"+dt1+"')");

} catch (Exception e) {
                e.printStackTrace();
            }

Это код поиска, и он закодирован в текстовом поле, а действие - освобождение ключа. Вот где приходит указанное выше исключение java.text.ParseException: Unparseable date: "".

try {
            Statement s = connection.hosp().createStatement();
            String ss = pid.getText().trim();

            ResultSet rs = s.executeQuery("select * from patients where patient_id like ('%"+ss+"%')");
            while(rs.next()){
             nic.setText(nics);
             fname.setText(fnames);
             lname.setText(lnames);
             .... etc
            String datevalue=rs.getString(16);         
            String datevalue1=rs.getString(17);            
            DateFormat formatter ;
            Date date, date1;  
            formatter = new SimpleDateFormat("yyyy-MM-dd");   
            date = (Date)formatter.parse(datevalue);    
            date1 = (Date)formatter.parse(datevalue1); 
            doa.setDate(date);    
            dod.setDate(date1);
            }

        }catch (Exception e) {
            e.printStackTrace();
            }

если есть какой-либо другой способ решить эту проблему, пожалуйста, укажите это.

1 ответ

Решение

Вы все еще не предоставили всю информацию, так что я предполагаю. Во всяком случае, это то, что я нашел.

  1. dt а также dt1 столбцы пронумерованы как 15 а также 16 от твоего insert заявление.

    String datevalue = rs.getString(16);  // Supposed to be 15   
    String datevalue1 = rs.getString(17); // Supposed to be 16 
    
  2. При получении данных из столбцов используйте rs.getXXX("Column Name") (дает больше видимости) вместо rs.getXXX("columnIndex"),

  3. Также используйте JDBC PreparedStatement. В настоящее время ваше приложение не избегает SQL-инъекций

  4. Старайтесь не использовать varchar за date тип данных. использование Date Вот для чего они были созданы.

Другие вопросы по тегам