我想做什么?
我有一个 Customers 类,它有一个变量 dob//Date of Birth
我正在尝试使用 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 - 是用户输入日期的字段。
我使用以下不同的输入测试了我的应用程序:
- 12-12-1993
- 10-05-1970
问题是:存储在 MySQL 表中的值是 1992-12-27,我有一种强烈的感觉,这是某个默认日期。
我想知道,如何将字符串解析为日期,然后将其发送到 MySQL 表。
最佳答案
(如评论中所讨论...)
你有两个问题:
- 您的解析格式不正确。它应该使用“yyyy”而不是“YYYY”
更重要的是 (IMO) 您的错误处理不正确。您正在使用此
catch
block :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
只是一个虚构的异常 - 您应该考虑您希望在您的应用中始终如一地使用什么。)
发生错误时,有两件事非常重要:
- 你当时应该妥善处理。这通常意味着中止当前操作,尽管在某些情况下您可以重试,或者在没有一些不重要的信息的情况下继续。
- 您应该捕获足够的信息以便稍后了解错误。
关于java - 如何使用 java swing 文本框输入日期并将其存储在 mysql 数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13392824/