【问题标题】:how to take an input of date using java swing text box and store in mysql database?如何使用 java swing 文本框输入日期并存储在 mysql 数据库中?
【发布时间】:2012-11-15 06:58:18
【问题描述】:

我想做什么?

我有一个类 Customers 有一个变量 dob // 出生日期

我正在尝试使用 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 表。

【问题讨论】:

  • 为什么你抓到ParseException 却又像成功一样继续?
  • “dd-MM-YYYY”应该是“dd-MM-yyyy”。如果您使用Y,它会产生ParseException
  • setDOB中dob参数的字段长什么样?你那里还有正确的价值观吗?
  • @JonSkeet 我继续,好像我已经成功了,因为我想看看我的查询是否运行良好。它正在运行,我的数据确实进入了表格。
  • @BheshGurung 是的,将“dd-MM-YYYY”更改为“dd-MM-yyyy”有效,谢谢分配。

标签: java mysql jdbc


【解决方案1】:

(如 cmets 中所述...)

你有两个问题:

  • 您的解析格式不正确。它应该使用“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 只是一个虚构的例外 - 您应该考虑要在您的应用程序中始终如一地使用什么。)

发生错误时有两点非常重要:

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

【讨论】:

  • e.printstacktrace 和你记录异常的方法有什么区别?
  • 能否详细说明 DataValidationException。
  • @IshanKhanna:这只是您在整个代码库中使用的某种异常。哎呀,您可能会使用ParseException - 但要始终如一地这样做。 e.printStackTrace好的,只要你确定你真的看过它,但你可能不想继续。但是,如果您使用专用的日志记录 API,它通常会更干净 - 例如 java.util.logging 中的那个。
猜你喜欢
  • 2022-01-08
  • 1970-01-01
  • 2014-05-04
  • 2020-08-11
  • 2011-12-24
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
相关资源
最近更新 更多