java如何使用jdatechooser从mysql数据库中保存和检索空日期
我正在用netbeans为我的项目开发一个简单的医院管理系统,所以这里简单介绍一下我的问题。当患者入院和出院时,应记录其入院日期和出院日期。所以我把两个jDateChooser放在入院和出院的地方。因此,当新患者入院时,我必须将出院日期jDateChooser保留为空并保存
我将jDateChooser的日期格式更改为
"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”,并允许null 值,ok没有问题这次它在db中保存为空
在检索患者信息时,我将入院日期和出院日期分别编码在两个jDateChooser中。但会产生这样的异常
爪哇。文本ParseException:无法解析的日期:“” 在爪哇。文本日期格式。解析(DateFormat.java:357) 病人。pidKeyReleased(Patient.java:455) 病人。访问$000(Patient.java:23) 病人1美元。密钥释放(Patient.java:118) 在爪哇。awt。组成部分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();
}
这是搜索代码,编码在文本框中,操作为keyrelease。 这就是上面提到的java异常的地方。文本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();
}
如果有任何其他方法来解决这个问题,请提出来
# 1 楼答案
你还没有提供所有的信息,所以我想。无论如何,这就是我所发现的
dt
和dt1
列从insert
语句中编号为15
和16
从列中获取数据时,使用
rs.getXXX("Column Name")
(提供更多可见性)而不是rs.getXXX("columnIndex")
也可以使用JDBC PreparedStatement。当前你的应用程序没有避免SQL Injection
尽量不要对
date
数据类型使用varchar
。使用Date
这就是它们的设计目的