【问题标题】:java.time.DateTimeException: Unable to obtain LocalTime from TemporalAccessor: 2017-10-29 of type java.time.LocalDatejava.time.DateTimeException:无法从 TemporalAccessor 获取 LocalTime:java.time.LocalDate 类型的 2017-10-29
【发布时间】:2017-11-19 08:12:15
【问题描述】:

我正在尝试将 datePicker 中的日期作为字符串保存到 mysql 表中。我使用 Javafx Scene 构建器创建了 datePicker,但是当我尝试以字符串格式保存日期时,它会返回此错误:

java.time.DateTimeException:无法从 TemporalAccessor 获取 LocalDateTime:java.time.LocalDate 类型的 2017-10-29

首先,我想将来自用户的输入数据添加到可观察列表中,然后在表格中显示给用户。之后,一旦用户完成添加他们想要的相关数据,我想将可观察列表数据插入到 mysql 数据库中。

我想以字符串的形式将 datePicker 数据添加到可观察列表中。

我的问题是如何将日期选择器的值更改为字符串并将其传递到可观察列表中。在我的代码中,我使用了 .getEditor().getText() 但它会引发上述错误。

我的日期选择器被标记

     fromDateCreateTask
     toDateCreateTask

数据库中的 T_startDate 和 T_endDate 列的数据类型是 varchar(50)。

这是我的代码:

void addTaskToTable(){


    AllTaskData.add(new Task(
            Integer.parseInt(taskNumberCreateTask.getText()),
            taskNameCreateTask.getText(),
            getProjectId(projectSelectedCombobox.getValue()),
            taskStatusCreateTask.getText(),taskInformationCreateTask.getText(), 
            (String) teamHeadComboBoxCreateTask.getValue(),
            fromDateCreateTask.getEditor().getText(),
            toDateCreateTask.getEditor().getText(),
            timeSpan()));
     createTaskTable.setItems(AllTaskData);

    taskNameCreateTask.clear();
    fromDateCreateTask.getEditor().clear();
    toDateCreateTask.getEditor().clear();
    teamHeadComboBoxCreateTask.setValue("Team Lead");
    taskInformationCreateTask.clear();
    taskCount++;

    taskNumberCreateTask.setText(Integer.valueOf(getTotalNumberOfTasks() + 1+taskCount).toString());

}

添加到mysql表:

public void createMultipleTasks() {

    String sql = " insert into Task (T_id, T_name, P_projectCode, T_status, T_Description, T_lead,T_startDate,T_endDate,T_timespan)"
            + " values (?, ?, ?, ?, ?,?,?,?,?)";

    try {

        for(Task userTasks: AllTaskData){

        int taskNumber = userTasks.getTaskNumber();
        String taskName = userTasks.getTaskName();
        String taskStatus = userTasks.getTaskStatus();
        String taskDescription = userTasks.getTaskInformation();
        String teamLead = userTasks.getTaskTeamMemberAssigned();
        String startingDate = userTasks.getTaskFromDate();
        String endingingDate = userTasks.getTaskToDate();
        int taskcompletionTime = userTasks.getTaskTimeSpan();
        int projectId = userTasks.getProjectCode();//getProjectId(projectSelectedCombobox.getValue());



        preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(1, taskNumber);
        preparedStatement.setString(2, taskName);
        preparedStatement.setInt(3, projectId);
        preparedStatement.setString(4, taskStatus);
        preparedStatement.setString(5, taskDescription);
        preparedStatement.setString(6, teamLead);
        preparedStatement.setString(7, startingDate);
        preparedStatement.setString(8,endingingDate);
        preparedStatement.setInt(9, taskcompletionTime);

        try{
        preparedStatement.execute();
        }catch (Exception e) {
                DBConnection.infoBox("Error Saving Data", "Fail", null);
                e.printStackTrace();
            }
        }
            try {
             DBConnection.infoBox("Click ok to cancel this message", "Sucess", "Saving of tasks has been successfull");

            } catch (Exception e) {
                DBConnection.infoBox("Error Unable to Open View", "Fail", null);
                e.printStackTrace();
            }

    } catch (Exception e) {
        DBConnection.infoBox("Error Saving Data", "Fail", null);
        e.printStackTrace();
    }

}

调用函数:

    @FXML
void handleAddNewTaskAction(ActionEvent event) {

    if (taskNameCreateTask.getText()==null || taskNameCreateTask.getText()==" " || taskNameCreateTask.getText().isEmpty() ||
        fromDateCreateTask.getValue() == null || toDateCreateTask.getValue() == null ||
        teamHeadComboBoxCreateTask.getValue() == null || teamHeadComboBoxCreateTask.getValue().isEmpty() || teamHeadComboBoxCreateTask.getValue() == "Team Lead" ||
        taskInformationCreateTask.getText() == null || taskInformationCreateTask.getText().isEmpty() || taskInformationCreateTask.getText() == " "
            ){
      DBConnection.infoBox("Please enter text in missing fields", "Error Adding Data", "nil");
    }else{

    addTaskToTable();

    }
}

【问题讨论】:

  • 能否添加任务表的架构?

标签: java javafx datepicker


【解决方案1】:

您可以在处理数据库日期时使用 java.sql.Date 或 java.sql.Timestamp。请参考下文。

public class JavaDateExceptionResolver {

public static void main(String[] args) throws ParseException {
    dateIssueResolverType1("2017-10-29");
    dateIssueResolverType2("2017-10-29");
}

private static Date dateIssueResolverType1(String input) throws ParseException {

    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    java.util.Date dt=sdf.parse(input);
    java.sql.Date sqlDate=new java.sql.Date(dt.getTime());
    System.out.println(sqlDate);
    return sqlDate;
 }

private static Timestamp dateIssueResolverType2(String input) throws ParseException {
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    java.sql.Timestamp stmp=new java.sql.Timestamp(sdf.parse(input).getTime());
    System.out.println(stmp);
    return stmp;
}       
}

【讨论】:

  • 感谢您的回答,但是我更新了这个问题,因为它似乎有些不清楚。我想先将 datePicker 值作为字符串保存到可观察列表中,然后将可观察列表数据保存在 mysql 数据库中。
  • 数据库上的 T_startDate 和 T_endDate 列是哪些数据类型?
  • 他们是 varchar(50)
  • 当我尝试将 fromDateCreateTask 和 toDateCreateTask 添加到可观察列表时出现错误。
  • 您是否能够从变量 fromDateCreateTask 和 toDateCreateTask 中获取值?如果是这样,他们会喜欢 2017-10-29。如果是,那么这些变量的数据类型是什么数据类型? Observable List 的 DataType 是什么。
猜你喜欢
  • 2016-05-19
  • 2019-04-16
  • 2017-10-02
  • 2018-01-01
  • 2020-07-29
  • 2020-12-24
  • 2019-12-04
  • 1970-01-01
  • 2022-12-13
相关资源
最近更新 更多