![](/img/trans.png)
[英]get a date using a JDateChooser and save it into mysql database
[英]how to save & retrieve a null date from mysql db using jdatechooser
我正在为使用netbeans的项目开发一个简单的医院管理系统,所以这是我的问题。 患者入院和出院时,应记录其入院日期和出院日期。 所以我放了两个jDateChoosers入场和出场。 因此,当新病人承认我必须将出院日期jDateChooser保留为空白并保存时。
我将jDateChoosers的日期格式更改为"yyyy-MM-dd"
(我使用mysql控制中心0.9.4创建数据库和表)首先,我尝试通过将排出column(dod)数据类型更改为“ date”来保存日期,然后按如下所示跳过异常。
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data truncated for column 'dod' at row
然后,我尝试将数据类型更改为'varchar'并允许使用null值,这一次它在数据库中保存了空白,这没问题。
检索患者信息时,我已将入院和出院日期编码为分别出现在两个jDateChoosers中。 但是这样会产生异常
java.text.ParseException:无法解析的日期:“。”,位于Patient.access $ 000(Patient.java:23)的Patient.pidKeyReleased(Patient.java:455)的java.text.DateFormat.parse(DateFormat.java:357)。 Patient $ 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:不可解析的日期:“”出现的地方。
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();
}
如果还有其他方法可以解决此问题,请提及。
您仍然没有提供所有信息,所以我假设。 无论如何,这就是我所发现的。
在您的insert
语句中, dt
和dt1
列的编号分别为15
和16
。
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
就是他们设计的目的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.