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!
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