Problemi di inserimento date nel db MySql da java web application

Andrea Visciola - 08/03/2019

 

Ciao a tutti.
Ho il seguente problema:
Sto facendo una java web application molto semplice in cui memorizzo nel database i dati relativi a una persona: nome, cognome e data di nascita.
L'applicazione sembra funzionare tranne per il fatto che, inserendo una data (ad esempio 07/03/2019) mi ritrovo sul db tale data diminuita di un giorno, ovvero 2019-03-06. Com'è possibile? 
Potreste aiutarmi a fixare tale problema?
Di seguito il codice:

Il 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

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();
		}
	}

}

La classe che mi permette di convertire la data dal formato stringa al formato java.sql.Date

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;
		
	}

}

Jsp con il form per l'inserimento dei dati

<%@ 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

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("Personarita");

}catch(SQLException e){

System.out.println(e.getMessage());
System.out.println("Errore'inserimento");

}finally{

if(ps != null){
ps.close();
}

if(conn != null){
conn.close();
}
}
}

}

 

Javajob.it © 2019 - Javajob.it è un progetto realizzato da Gsoftware srls