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

Posted

技术标签:

【中文标题】如何使用 jdatechooser 从 mysql 数据库中保存和检索空日期【英文标题】:how to save & retrieve a null date from mysql db using jdatechooser 【发布时间】:2013-09-30 04:36:04 【问题描述】:

我正在使用 netbeans 为我的项目开发一个简单的医院管理系统,所以这里简单介绍一下我的问题。当患者入院和出院时,应记录其入院日期和出院日期。所以我放了两个jDateChooser用于入院和出院。所以当一个新病人承认我必须保持出院日期 jDateChooser 空白并保存。

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

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

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

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

在检索患者信息时,我已将入院和出院日期编码为分别显示在两个 jDateChooser 中。但是会产生这样的异常

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

这是搜索代码,它被编码在一个文本框中,动作是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();
            

如果有其他方法可以解决这个问题,请提出。

【问题讨论】:

您需要提供有关这两种情况的更多详细信息,例如相关代码和异常,您如何尝试插入值以及如何尝试提取它们等。 感谢Smit的快速回复,我已经添加了相关代码。 【参考方案1】:

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

    dtdt1 列在您的 insert 语句中编号为 1516

    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 Injection

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

【讨论】:

以上是关于如何使用 jdatechooser 从 mysql 数据库中保存和检索空日期的主要内容,如果未能解决你的问题,请参考以下文章

将 JDateChooser 中的日期插入 Oracle DB

JTable 单元格中的 JDateChooser 输入键并不总是有效

JDateChooser 仅在您自动选择一次日期时执行操作

验证jDateChooser

如何使用代码点火器从 mysql 获取单个结果? [复制]

如何使用 Vuejs 前端框架使用 MySQL/PHP 从服务器获取数据