如何使用jdatechooser从MySQL DB保存和检索空日期



我正在使用 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();
            }

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

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

  1. dt列和dt1列编号为15列,insert语句中16列。

    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 这就是它们的设计目的。

相关内容

  • 没有找到相关文章

最新更新