繁体   English   中英

如何使用jdatechooser从mysql数据库保存和检索空日期

[英]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();
            }

如果还有其他方法可以解决此问题,请提及。

您仍然没有提供所有信息,所以我假设。 无论如何,这就是我所发现的。

  1. 在您的insert语句中, dtdt1列的编号分别为1516

     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注入

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM