@webserverby
Java junior

Как передать дату с jsp страницы через Spring в базу данных MySQL?

Помогите пожалуйста разобраться с передачей даты из страницы jsp в базу данных.
Хотелось бы чтобы дату можно было выбирать и потом отправлять в базу. Использовал
<input type="date" name="birthDate">
В базе данных колонка birthDate имеет тип date. При отправке других значений они все записываются в базу, но когда ввожу дату, то выдает ошибку.

Запрос, отправленный клиентом был синтаксически некорректным.


Код страницы jsp
<%@ page language="java" contentType="text/html" pageEncoding="utf8"%>
<!DOCTYPE html>
<html lang="ru">
<body>
<form action="${pageContext.servletContext.contextPath}/addclient" method="post">   
    <table >        
            <th><input type="text" name="surname" placeholder="Фамилия" ></th>        
            <th><input type="text" name="name" placeholder="Имя" ></th>       
            <th><input type="text" name="patronymic"  placeholder="Отчество" required></th>
		
            <th><input type="date"  name="birthDate" ></th>
    </table>
    <input type="submit"  value="Создать">
    </div>
</form>
</body>
</html>


Код класса Client
@Entity
@Table(name = "client")
public class Client {
    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @Basic
    @Column(name = "surname")
    private String surname;
    @Basic
    @Column(name = "name")
    private String name;
    @Basic
    @Column(name = "patronymic")
    private String patronymic;

    @Basic
    @Column(name = "birthDate")
    private Date birthDate;

    public Client() {    }


Контроллер
@Controller
public class ClientController {
    @Autowired
    private ClientService clientService; 

    @RequestMapping(value = "/addclient", method = RequestMethod.POST)
    public String addClient(@ModelAttribute Client client) {
        clientService.addClient(client);
        return "redirect:/client";
    }
}

Дао класс
@Repository
public class ClientDaoImpl implements ClientDao{
    @Autowired
    private SessionFactory sessionFactory;    

    public void addClient(Client client){   
        sessionFactory.getCurrentSession().save(client);
    }
}
  • Вопрос задан
  • 2062 просмотра
Решения вопроса 1
@sirs
Насколько я понимаю Ваша проблема связана с тем, что Вы используете java.util.Date и пытаетесь его сохранить в mysql. Есть несколько вариантов решения:
1) В классе Client поменять тип поля на java.sql.Date и где-нибудь перед сохранением в бд делать конвертацию
java.sql.Date birthDate= new java.sql.Date((birthDateInput).getTime());


2) Добавить аннотацию @Temporal
@Temporal(TemporalType.DATE)
private Date birthDate;

в классе Client.

3) Собрать дату как string
java.text.SimpleDateFormat sdf = 
     new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String birthDateTime = sdf.format(birthDateInput);

и сохранить в базу. Минус будет в том, что при select нужно будет делать обратные действия.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы