Ciao a tutti,
sto realizzando una semplice web application che permette di inserire tramite form di una pagina jsp, dei dati relativi ad una persona(nome, cognome e data di nascita) su db MySql.
L'applicativo sembra funzionare correttamente tranne per il fatto che, inserendo una data nella casella del form relativa alla data di nascita(es. 25/03/1988) controllando sul db MySql, tale data risulta essere 1988-03-24, ovvero diminuita di un giorno.
Premetto che la colonna relativa alla data di nascita su MySql, è in formato date e non datetime.
Ho praticamente girato tutto il web in cerca della soluzione al problema, cercando pure su stack overflow, ma senza risultati.
Di seguito il codice dell'applicativo, nella speranza che qualcuno di voi possa darmi una mano:
Il bean
codice:
package bean;
import java.io.Serializable;
import java.sql.Date;
public class Persona implements Serializable {
private int idPersona;
private String nome;
private String cognome;
private Date dataNascita;
public Persona() {
super();
}
public Persona(String nome, String cognome, Date dataNascita) {
super();
this.nome = nome;
this.cognome = cognome;
this.dataNascita = dataNascita;
}
public Persona(int idPersona, String nome, String cognome, Date dataNascita) {
super();
this.idPersona = idPersona;
this.nome = nome;
this.cognome = cognome;
this.dataNascita = dataNascita;
}
public int getIdPersona() {
return idPersona;
}
public void setIdPersona(int idPersona) {
this.idPersona = idPersona;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCognome() {
return cognome;
}
public void setCognome(String cognome) {
this.cognome = cognome;
}
public Date getDataNascita() {
return dataNascita;
}
public void setDataNascita(Date dataNascita) {
this.dataNascita = dataNascita;
}
}
La servlet
codice:
package servlet;
import java.io.IOException;
import java.sql.Date;
import java.sql.SQLException;
import java.text.ParseException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bean.Persona;
import dao.ProvaDao;
import utility.ManipolazioneDate;
/**
* Servlet implementation class Inserimento
*/
@WebServlet("/Inserimento")
public class Inserimento extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public Inserimento() {
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String nome = request.getParameter("nome");
String cognome = request.getParameter("cognome");
String dataNascita = request.getParameter("dataNascita");
Date dataN = null;
try {
dataN = (Date) ManipolazioneDate.convertiData(dataNascita);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Persona p = new Persona(nome, cognome, dataN);
System.out.println(p.getNome());
System.out.println(p.getCognome());
System.out.println(p.getDataNascita());
try{
ProvaDao.registraPersona(p);
}catch(SQLException e){
e.printStackTrace();
}
}
}
Una classe con un metodo per convertire la data in formato String, proveniente dal form, in una java.sql.Date
codice:
package utility;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ManipolazioneDate {
public static Date convertiData(String data) throws ParseException{
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Date parser = format.parse(data);
java.sql.Date dataSql = new java.sql.Date(parser.getTime());
return dataSql;
}
}
La jsp con la form per l'inserimento dati
codice:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<form action="/Prova/Inserimento" method="get">
<p>Nome</p>
<input type="text" value="" name="nome">
<br>
<p>Cognome</p>
<input type="text" value"" name="cognome">
<br>
<p>Data di nascita</p>
<input type="text" value="" name="dataNascita">
<br>
<input type="submit" value="Invia">
</form>
</div>
</body>
</html>
Il dao con il metodo per l'nserimento dei dati nel db
codice:
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import bean.Persona;
import utility.Connessione;
public class ProvaDao {
public static void registraPersona(Persona persona) throws SQLException{
Connection conn = Connessione.getConnection();
PreparedStatement ps = null;
String ins = "insert into prova2.persona(nome, cognome, dataNascita) values(?,?,?)";
try{
ps = conn.prepareStatement(ins);
ps.setString(1, persona.getNome());
ps.setString(2, persona.getCognome());
ps.setDate(3, persona.getDataNascita());
ps.executeUpdate();
System.out.println("Persona inserita");
}catch(SQLException e){
System.out.println(e.getMessage());
System.out.println("Errore nell'inserimento");
}finally{
if(ps != null){
ps.close();
}
if(conn != null){
conn.close();
}
}
}
}