1

我想做的事 ?

我有一个客户类,它有一个可变的出生日期//出生日期

我正在尝试使用 java Swing 文本字段从用户那里获取输入。

将其转换为 java 日期,然后转换为 java.sql.Date,以便我可以将其存储在我的 MySQL 数据库中。

这是 Customer 类的 setter 方法

public  void setDOB(java.sql.Date dob)
{
    DateOfBirth = dob;
}   

这是我的 Swing 类(应用程序窗口加载器)的代码

//Date
            if(textField_5.getText().isEmpty())
                lblerr.setVisible(true);
            else
            {
                try {
                    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-YYYY");
                    Date dob = null;
                    dob = sdf.parse(textField_5.getText());
                    java.sql.Date sqlDate = new java.sql.Date(dob.getTime());
                    c1.setDOB(sqlDate);

                } catch (ParseException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                allinfoisentered = true;
            }   

textField_5 - 是用户输入日期的字段。

我使用以下不同的输入测试了我的应用程序:

  1. 1993 年 12 月 12 日
  2. 10-05-1970

问题是:存储在 MySQL 表中的值是 1992-12-27,我有一种强烈的感觉,这是一些默认日期。

我想知道,我如何将字符串解析为日期,然后将其发送到 MySQL 表。

4

1 回答 1

2

(正如评论中所讨论的......)

你有两个问题:

  • 您的解析格式不正确。它应该使用“yyyy”而不是“YYYY”
  • 更重要的是(IMO)您的错误处理不正确。您正在使用此catch块:

    catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    

    ...这意味着即使解析失败,您也会插入除日期之外的所有数据,这些数据不会被设置。无论如何,您应该能够从日志文件中获取信息,但可能您没有记录System.err,或者您没有查看日志。

错误处理非常重要。如果在解析数据时发生异常,我希望您根本不想插入记录 - 相反,错误应该向上传播到堆栈,迫使您注意它,并且不会丢失信息。所以你可能想要这样的东西:

catch (ParseException e) {
    throw new DataValidationException(
        "Error parsing date: " + textField_5.getText(), e);
}

DataValidationException这只是一个虚构的例外 - 你应该考虑你想在你的应用程序中一致地使用什么。)

发生错误时,有两件事非常重要:

  • 你当时应该妥善处理。这通常意味着中止当前操作,尽管在某些情况下您可以重试,或者在没有一些不重要信息的情况下继续。
  • 您应该捕获足够的信息以便以后了解错误。
于 2012-11-15T07:17:27.343 回答