Data No Mysql esta saindo como NULL

16 respostas
java
J

Estou montando um projetinho para ajudar o meu pai a um tempo e resolvi faze-lo em java, ainda falta muita coisa. Estou com uma dificuldade com a entrada da data esta aparecendo como null no mysql no campo quando faço uma consulta. Eu vou deixar aqui o código caso vocês consigam me ajudar.
Este é o Model

package Model;

import java.sql.Date;

/**
*

  • <a class="mention" href="/u/jhonnatan">@Jhonnatan</a>
    
    */
    
    public class Viagens {
    
    int id;
    
    String destino;
    
    Date data;
    
    String motorista;
    
    String veiculo;
    

    public Viagens() {
    }

    public Viagens(String destino, Date data, String motorista, String veiculo) {
    
    this.destino = destino;
    
    this.data = data;
    
    this.motorista = motorista;
    
    this.veiculo = veiculo;
    
    }
    
    public int getId() {
    
    return id;
    
    }
    
    public void setId(int id) {
    
    this.id = id;
    
    }
    
    public String getDestino() {
    
    return destino;
    
    }
    
    public void setDestino(String destino) {
    
    this.destino = destino;
    
    }
    
    public Date getData() {
    
    return data;
    
    }
    
    public void setData(Date data) {
    
    this.data = data;
    
    }
    
    public String getMotorista() {
    
    return motorista;
    
    }
    
    public void setMotorista(String motorista) {
    
    this.motorista = motorista;
    
    }
    
    public String getVeiculo() {
    
    return veiculo;
    
    }
    
    public void setVeiculo(String veiculo) {
    
    this.veiculo = veiculo;
    
    }
    
    }
    

Viagens DAO

/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package DAO;
import Conexao.ConnectionFactory;

import Model.Viagens;

import Model.Motorista;

import Model.Veiculos;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

/**
*

  • @Jhonnatan
    */
    public class ViagensDAO {

    private Connection con = null;

    public ViagensDAO() {

    con = ConnectionFactory.getConnection();
    
    }
    
    public boolean save(Viagens viagens){
    
    String sql = INSERT INTO viagens (Data, Destino, Motorista, Veiculo) VALUES (?,?,?,?);
    
    PreparedStatement stmt = null;
    
    try {
         stmt = con.prepareStatement(sql);
         stmt.setDate(1,viagens.getData());
         stmt.setString(2,viagens.getDestino());
         stmt.setString(3,viagens.getMotorista());
         stmt.setString(4, viagens.getVeiculo());
         stmt.executeUpdate();
     } catch (SQLException ex) {
         System.out.println("Erro"+ex);
     }
     finally{
         ConnectionFactory.closeConection(con, stmt);
     }
    return false;
    

    }

    public boolean update(Viagens viagens){
    
    String sql = UPDATE Viagens SET Data = ?, Destino = ?, Motorista = ?, Veiculo = ? WHERE idViagens = ?;
    
    PreparedStatement stmt = null;
    
    try {
         stmt = con.prepareStatement(sql);
         stmt.setInt(1, viagens.getId());
         stmt.setDate(2,viagens.getData());
         stmt.setString(3,viagens.getDestino());
         stmt.setString(4,viagens.getMotorista());
         stmt.setString(5, viagens.getVeiculo());
         stmt.executeUpdate();
         return true;
     } catch (SQLException ex) {
         System.out.println("Erro"+ex);
         return false;
     }
     finally{
         ConnectionFactory.closeConection(con, stmt);
     }
    

    }

    public boolean delete(Viagens viagens){
    
    String sql = DELETE FROM viagens WHERE idViagens = ?;
    
    PreparedStatement stmt = null;
    
    try {
         stmt = con.prepareStatement(sql);
         stmt.setInt(1, viagens.getId());
         stmt.executeUpdate();
         return true;
     } catch (SQLException ex) {
         System.out.println("Erro"+ex);
         return false;
     }
     finally{
         ConnectionFactory.closeConection(con, stmt);
     }
    

    }

    public List findAll(){

    String sql = "SELECT * FROM Viagens INNER JOIN Motoristas ON Motoristas.idMotoristas = Viagens.Motorista INNER JOIN Veiculos ON Veiculos.idVeiculos = Viagens.veiculo";
    
     
     PreparedStatement stmt = null;
     ResultSet rs = null;
     
     List<Viagens> viagenses = new ArrayList<>();
     try {
         stmt = con.prepareStatement(sql);
         rs = stmt.executeQuery();
         
         while(rs.next()){
             Viagens viagens = new Viagens();
             viagens.setId(rs.getInt("idViagens"));
             viagens.setData(rs.getDate("Data"));
             viagens.setDestino(rs.getString("Destino"));
             Motorista motorista = new Motorista();
             motorista.setNome(rs.getString("Motorista"));
             Veiculos veiculos = new Veiculos();
             veiculos.setId(rs.getInt("Veiculo"));
             viagenses.add(viagens);
         }
     } catch (SQLException ex) {
         System.out.println("Erro"+ex);
     }finally{
         ConnectionFactory.closeConection(con, stmt, rs);
     }
     return viagenses;
    

    }

}

Esse é o action do botão salvar da view “CadastroViagens”

private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {

ViagensDAO ViagensDAO = new ViagensDAO();

Viagens viagens = new Viagens();

viagens.setMotorista(cbMotorista.getSelectedItem().toString());

viagens.setVeiculo(cbVeiculo.getSelectedItem().toString());

viagens.setDestino(jbDestino.getSelectedItem().toString());

SimpleDateFormat format = new SimpleDateFormat(dd/mm/yyyy);

try {

Date data = (Date) format.parse(txtDataViagem.getText());

} catch (ParseException ex) {

Logger.getLogger(CadastroViagens.class.getName()).log(Level.SEVERE, null, ex);

}

ViagensDAO.save(viagens);

}
private void jbDestinoActionPerformed(java.awt.event.ActionEvent evt) {                                          
    // TODO add your handling code here:
}

BD%20null

Eu acho que estou errando no formato, o formato do campo esta no tipo date em mysql

16 Respostas

R
Date dataSistema = new Date();

SimpleDateFormat formato = new SimpleDateFormat(dd/MM/yyyy);

lblData.setText(formato.format(dataSistema));

//usa essa string no lugar da que vc tá usando.

J

Ele ainda está retornando nulo…

R

Como está configurado o campo data no Banco de Dados?

J

Data esta no formato date

J

BD%20date

R

Se você vai definir a data no Java não tem a menor necessidade de definir esse campo como date, mano. Usa um Varchar(10) e seu problema será resolvido.
Os campos ficam nulos pq você tá enviando um formato não reconhecido pelo MySQL.

R

Mas, caso queira inserir no campo data o momento exato em que o registro foi inserido no banco de dados muda o campo para timestamp. Porém, mudar pra varchar(12) será mais simples e fácil.

J

Okay, vou fazer aqui…

D

Claro que tem! O banco de dados possui o tipo DATE para armazenar data. Senão, pode esquecer todos os tipos de dados e salva tudo como varchar.

Não, não mude nada.
Você chegou a debugar e certificou-se de que está passando a data até o método que persiste?

J

Boa tarde! Sim, os dados entram e as Foreign Keys funcionam, mas quando mando o Select no command line do mysql o campo data fica como NULL. Eu não sei o que esta dando de errado.

J

Eu estou achando que o campo data está entrando como String ao invés de Date. Mas não acho onde errei.

P
try {
    Date data = (Date) 
    format.parse(txtDataViagem.getText());
    viagem.setDataViagem(data);//vc esqueceu
  }
J

Fiz o que citou mas agora no momento de cadastrar aparece esse erro:

Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date

P

Tente:

try {
  String data = txtDataViagem.getText();  
  viagem.setDataViagem(Date.valueOf(data));
 }

Se der erro passe a data no formato yyyy-mm-dd.

String data = txtDataViagem.getText();
data = data.replaceAll("(\\d{2}).(\\d{2}).(\\d{4}"), "$3-$2-$1");
viagem.setData(Date.valueOf(data));
D

Cara, não é isso.
Em algum ponto do código ele está tentando converter uma java.util.Date direto para uma java.sql.Date.
Só que ele precisa postar o stack inteiro ou identificar onde ele tenta essa conversão.
O problema é que o sujeito (assim como muita gente aqui) não quer dar informações, não se ajuda.

P

@darlan_machado, grato pela abordagem.

Esse é trecho do erro atual, onde ele tenta converter SqlDate para java.util.Date

Mas o que me chamou a atenção era que ele convertida mas não setava a data na instância viagem e gravava null no banco de dados.

Isso ocorria porque ele errava o parse, fazia o catch, não tratava nada e seguia para a persistência com a data default do objeto: null.

Quando pedi para alterar, ele apontou a exception no parse da sql date para util date, que já vinha sendo impressa no console mas ele não havia mencionado.

Então são duas excessões.
A de null: resolvida.
É a de parse.

:slightly_smiling_face:

Criado 23 de janeiro de 2020
Ultima resposta 24 de jan. de 2020
Respostas 16
Participantes 4