Como salva tipo date no mysql

Não estou conseguindo salvar date no MySQL?

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

<link rel="stylesheet"
href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script type="text/javascript"
src="https://code.jquery.com/jquery-3.1.0.js"></script>
<script type="text/javascript"
src="https://code.jquery.com/ui/1.12.0/jqueryui.js"></script>


<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Cadastrar Usuario</title>


</head>
<body>
	<center>
		<h1>Cadastrar Usuario</h1>
		<br/><br/>
		 ${msg}
	</center>
	<div id="create">
		<form id="form1" action="Controle?cmd=create" method="post">
			Nome<br /> <input type="text" name="nome"  value="" size="50" id="nome" /><br />
			
			Email<br/> <input type="email" name="email"  value="" size="50" id="email" /> <br /> 
			Nascimento <input type="date" name="dataNascimento"/><br/>
			<input type="submit" value="Enviar" />
		
	 
		</form>
		
	
	 
	</div>
	
	
</body>
</html>

o mysql nao esta reconhecendo a coluna date, eu acho que é a ordem da data que esta (dd/MM/yyyy)
como fazer para o mysql reconhecer e salvar a data

Onde está o código que realiza a inserção?

public class UsuarioDao extends Dao {

	public void create(Usuario u) throws Exception {
		open();

		stmt = con.prepareStatement("insert into usuarios values (null,?,?,?)");
		
		stmt.setString(1, u.getNome());
		stmt.setString(2, u.getEmail());
		stmt.setDate(3, new Date(u.getDataNascimento().getDate()));
		stmt.execute();
		stmt.close();
		close();
	}







protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String cmd = request.getParameter("cmd");
		if (cmd.equalsIgnoreCase("create")) {
			create(request, response);
		}
		if(cmd.equalsIgnoreCase("alterar")){
			alterar(request,response);
		}

	}
//criar um novo usuario
	protected void create(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String msg ="";

		try {

			String nome = request.getParameter("nome");
			String email = request.getParameter("email");
			dataNascimento = request.getParameter("dataNascimento");
			Usuario u = new Usuario(null, nome, email,new Date());
			new UsuarioDao().create(u);
			msg ="Dados Gravados com Sucesso...";
			request.setAttribute("msg",msg);

		} catch (Exception ex) {
			msg ="ERROR: " + ex.getMessage();
			ex.printStackTrace();
			

		}finally {
			
			request.getRequestDispatcher("Sistema.jsp").forward(request, response);
			
		}
	}

seria esse?

new Date(u.getDataNascimento().getDate())
Se este new Date é um objeto da classe java.util.Date, você realmente terá erro.
Se for um objeto da classe java.sql.Date, não.
Como validar isso? Simples, essa linha

stmt.setDate(3, new Date(u.getDataNascimento().getDate()));

Estaria com erro.
Caso não esteja, você precisa verificar se a coluna é, efetivamente, do tipo date.

1 curtida

esta exatamente como vc falou, o problema é a ordem do dia mes e ano que o mysql nao esta reconhecendo, ele nao salva a data que eu coloco, ele salva um data qualquer, sempre a mesma data para todos os cadastro, e salva no formado ano mes e dia

Não, isso não acontece.
Muito provavelmente o erro esteja na tua query

stmt = con.prepareStatement("insert into usuarios values (null,?,?,?)");

Quando for criar uma query de inserção, por favor, defina quais são as colunas e qual a ordem das mesmas

stmt = con.prepareStatement("insert into usuarios (coluna_um, coluna_dois, coluna_tres, coluna_quatro) values (null,?,?,?)");

Isso evita problemas como este.

1 curtida

Só reforçando o que @Luis_Augusto_Santos NUNCA faça assim, coloque os campos para gravar as informações referente ao campos de sua tabela!

coloquei os campos

Cara, o teu discurso está incoerente com tuas ações.
Não adianta colocar os campos e mostrar o que aparece na tela.
Temos que ver código, código, entendeu?
Um ponto que pode estar ocasionando o problema é o fato de você estar utilizando um componente do html, que é input type=“date”. Ele possui um padrão diferente do padrão de dados que o java utiliza, logo, seria interessante verificar e ter certeza do que você recebe, a partir do momento que o formulário é submetido.

package persistence;

import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import entity.Usuario;

public class UsuarioDao extends Dao {

	public void create(Usuario u) throws Exception {
		open();

		stmt = con.prepareStatement("insert into usuarios (idUsuario,nome,email,dataNascimento)values (null,?,?,?)");
		
		stmt.setString(1, u.getNome());
		stmt.setString(2, u.getEmail());
		stmt.setDate(3, new Date(u.getDataNascimento().getDate()));
		stmt.execute();
		stmt.close();
		close();
	}


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

<link rel="stylesheet"
href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script type="text/javascript"
src="https://code.jquery.com/jquery-3.1.0.js"></script>
<script type="text/javascript"
src="https://code.jquery.com/ui/1.12.0/jqueryui.js"></script>


<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Cadastrar Usuario</title>


</head>
<body>
	<center>
		<h1>Cadastrar Usuario</h1>
		
	</center>
	<div id="create">
		<form id="form1" action="Controle?cmd=create" method="post">
			Nome<br /> <input type="text" name="nome"  value="" size="50" id="nome" /><br />
			
			Email<br/> <input type="email" name="email"  value="" size="50" id="email" /> <br /> 
			Nascimento <input type="text" name="dataNascimento"/><br/>
			<input type="submit" value="Enviar" />
		
	 
		</form>
		
	<br/><br/>
		 ${msg}
	 
	</div>
	
	
</body>
</html>

o problema continua o mesmo, coloquei type=“text” e mesmo assim nada

consegui resolver uma parte coloquei no java e no mysql como String e deixei só no html como type=“date”.
porem aparece no formato ano mes e dia.

Para salvar a data no banco você tem quem transformar o java.util.Date para java.sql.Date, sendo assim basta inserir esta linha:

stmt.setDate(++i, new java.sql.Date(u.getDataNascimento().getTime()));
1 curtida