如何保存&使用jdatechooser从mysql db中检索空日期

时间:2013-09-24 19:33:53

标签: java mysql netbeans jdatechooser

我正在使用netbeans为我的项目开发一个简单的医院管理系统,所以这是我的问题。当患者承认并从医院出院时,应记录他/她的入院日期和出院日期。所以我把两个jDateChoosers用于入院和出院。因此,当一名新患者承认我必须保持出院日期jDateChooser为空并保存。

  • 我将jDateChoosers的日期格式更改为"yyyy-MM-dd"

  • (我使用mysql控制中心0.9.4来创建我的数据库和表)首先我尝试通过更改放电列(dod)数据来保存日期 键入'date'然后跳转异常如下。

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

  • 然后我尝试将数据类型更改为'varchar'并允许null 这个值没问题,这次它在数据库中保存了空白。

  • 在检索患者信息时,我已将入院和出院日期分别编入两个jDateChoosers中。但是像这样生成异常

    java.text.ParseException:无法解析的日期:“” at java.text.DateFormat.parse(DateFormat.java:357) 在Patient.pidKeyReleased(Patient.java:455) at 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();
            }

这是搜索代码,它在文本框中编码,操作是keyrelease。 这就是上面提到的异常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 个答案:

答案 0 :(得分:1)

你还没有提供所有信息,所以我假设。无论如何这就是我找到的。

  1. dtdt1列从15语句编号为16insert

    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 Injection

  4. 尽量不要将varchar用于date数据类型。使用Date这就是他们的目的。