Как сохранить и получить нулевую дату из 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 ответ
Вы все еще не предоставили всю информацию, так что я предполагаю. Во всяком случае, это то, что я нашел.
dt
а такжеdt1
столбцы пронумерованы как15
а также16
от твоегоinsert
заявление.String datevalue = rs.getString(16); // Supposed to be 15 String datevalue1 = rs.getString(17); // Supposed to be 16
При получении данных из столбцов используйте
rs.getXXX("Column Name")
(дает больше видимости) вместоrs.getXXX("columnIndex")
,Также используйте JDBC PreparedStatement. В настоящее время ваше приложение не избегает SQL-инъекций
Старайтесь не использовать
varchar
заdate
тип данных. использованиеDate
Вот для чего они были созданы.