Java 如何解决这个错误;字符串不能转换为日期“;?

Java 如何解决这个错误;字符串不能转换为日期“;?,java,date,Java,Date,您好,我正在尝试将用户的出生日期存储在数据库中,代码如下: private void btnActionPerformed(java.awt.event.ActionEvent evt) { String username = txtUserName.getText(); String password = txtPassword.getText(); String em

您好,我正在尝试将用户的出生日期存储在数据库中,代码如下:

 private void btnActionPerformed(java.awt.event.ActionEvent evt) {                                                 

    String username = txtUserName.getText();
    String password = txtPassword.getText();
    String email = txtEmail.getText();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String birthdate = sdf.format(JDateChooser.getDate());      
    Users user = new Users();
    user.setUserName(cin);
    user.setPassWord(firstName);
    user.setEmail(email);
    user.setBirthDate(birthdate);
    try {        
       int count = Users.getInstance().insert(user);
       if(count == 1){
       JOptionPane.showMessageDialog(null,"success");
       reset();
       }else{
       JOptionPane.showMessageDialog(null,"Faild");
       }
    } catch (Exception ex) {
        Logger.getLogger(AddNewPatient.class.getName()).log(Level.SEVERE, null, ex);
    }
} 
我在“user.setBirthDate(birthdate);”行中遇到一个错误,该错误表示字符串不能转换为日期 因为参数birthdate在封装中被指定为日期类型(setBirthDate)
有没有办法解决这个问题,我是java编程新手,我正在努力提高我的java技能。

如果返回
日期

JDateChooser.getDate()
Date birthdate = JDateChooser.getDate();
// later...
user.setBirthDate(birthdate);
您需要的是一个
日期
,然后不要将其转换为
字符串
。只需将其保留为
日期

JDateChooser.getDate()
Date birthdate = JDateChooser.getDate();
// later...
user.setBirthDate(birthdate);
请注意,您还可以删除这一行,因为您没有使用它声明的变量:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");


通常,您希望尽可能经常地保持数据类型的原始形式。除非有特定的需要将某些内容表示为字符串(将其显示给用户,通过某种序列化API发送,等等),否则只需按原样使用数据,而不是将其转换为其他内容。

使用
JDateChooser.getDate()获取日期后,您将立即将其转换为字符串:
sdf.format(JDateChooser.getDate())

您应该将从
JDateChooser.getDate()返回的日期存储为实际日期对象

Date birthdate = JDateChooser.getDate();
然后您可以直接在其他功能中使用它:

user.setBirthDate(birthdate);
如果出于其他目的(可能向用户显示)确实需要将日期作为字符串,则可以将格式化的字符串版本存储在不同的变量中:

String birthdateString = sdf.format(birthdate);   

否则,如果您不需要字符串版本,您可以删除创建
sdf

的行。目前,您正在将
日期
格式化为字符串,然后尝试将其作为
日期
使用。。。您不能只使用JDateChooser.getDate()的结果而不将其格式化为文本吗?(请注意,我建议使用
java.time.LocalDate
并完全避免
java.util.Date
,但这是一个稍微不同的问题。)您好@David我在“java.util.Date birthdate=JDateChooser.getDate();”之前尝试过这个方法,我得到了一个错误:java.util.Date无法转换为java.sql.Date,如果我没有错的话,日期的格式应该存储为java.sql.date forma数据库?@Anass:类型很重要。该错误指的是两种不同的类型,称为
Date
JDateChooser.getDate()返回什么特定类型?
user.setBirthDate()
?如果需要在这两种类型之间进行转换,.JDateChooser.getDate()从JDateChooser字段中重新运行日期格式“yyyy-MM-dd”,并且user.setBirthDate()需要相同的类型,它可用于JtxtFileds,但不能用于JDateChooserwork@Anass:清楚具体是很重要的。
JDateChooser.getDate()
返回某种类型的
Date
对象(没有“格式”),还是返回一个
字符串,以特定格式表示
日期
?代码/错误暗示了前者,但您的注释暗示了后者。另外,如果
JDateChooser.getDate()
返回的类型与
user.setBirthDate()
所期望的类型相同,则此答案中的代码将解决问题中的错误。你在之前的评论中提到的另一个错误是在其他地方。为了纠正它,你必须对这些事情非常具体。它返回一个以特定格式表示日期的字符串,用户必须通过JDatechooser或手动键入来选择其生日我已经更新了顶部的代码,并包含了所有的文件,您可以查看一下吗?我尝试了这个,我在Preparedstatement“ps.setDate(7,u.getBirthDate());”中遇到了相同的错误