我正在使用 netbeans 为我的项目开发一个简单的医院管理系统,所以这是我的问题简介。当患者入院和出院时,应记录其入院日期和出院日期。所以我放了两个jDate选择器用于入院和出院。因此,当新患者入院时,我必须将出院日期留空并保存。
-
我将 jDateChoosers 的日期格式更改为
"yyyy-MM-dd"
-
(我使用 mysql 控制中心 0.9.4 来创建我的数据库和表(首先,我尝试通过更改放电列 (dod( 数据来保存日期键入"日期",然后跳转异常,如下所示。
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data truncated for column 'dod' at row
-
然后我尝试将数据类型更改为"varchar"并允许 null值,好的,这次它在数据库中保存空白没问题。
-
在检索患者信息时,我已经将入院和出院日期编码为分别出现在两个jDateChoosers中。 但是像这样生成异常
java.text.ParseException: unparseable date: "at java.text.DateFormat.parse(DateFormat.java:357(at Patient.pidKeyRelease(Patient.java:455(at Patient.access$000(Patient.java:23(at Patient$1.keyRelease(Patient.java:118(at 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();
}
如果有任何其他方法可以解决此问题,请提及。
你还没有提供所有的信息,所以我假设。无论如何,这就是我发现的。
-
dt
列和dt1
列编号为15
列,insert
语句中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
这就是它们的设计目的。