Ir ao conteúdo
  • Cadastre-se

Java Problema difícil de entender com jDataChooser no MySQL


Posts recomendados

Boa noite à todos.


Galera, estou com dois problemas referente as datas no meu sistema
Tenho uma tabela que me traz um produto com suas respectivas datas de compra/vencimento.

 

Problema numero 1 -> Está acontecendo algo difícil de entender, eu cadastro a data de compra agora (30/05/2018) e coloco a data de vencimento para dia 10/06/2018, porém tem produtos que ele cadastra como um dia antes, e tem produtos que ele cadastra como um dia depois, por exemplo:

 

NO SISTEMA:

1.JPG.0587f0e9699ed21d52609d8bd38a9b78.JPG
Obs.:   No sistema eu cadastrei o produto "coco" como: "COMPRA: 30/05/2018" e "VALIDADE 10/06/2018", perceba que ele retrocedeu um dia em ambas as datas. 
O produto coca cola está correto, eu cadastrei exatamente as datas apresentadas.


NO BANCO DE DADOS:
2.JPG.22dc2e4a124fdf1dcc97119da6c23e21.JPG
Obs.:   No banco de dados já aparece diferente, o produto "coco" está correto, foi essa data mesmo que inseri (_porem perceba que la em cima na tela do sistema ele me mostrou diferente_). 
O produto coca cola está incorreto, pois a data correta que eu cadastrei no sistema foi "COMPRA: 30/05/2018" e "VALIDADE: 10/06/2018".

Estou utilizando uma Table Model.

 

Resumindo ->  Alguns produtos estão certo no sistema e errado no banco e vise versa, desculpe a confusão, mas tentei explicar da melhor forma.

 

"Problema" numero 2 -> Como faço para ser exibido a data no padrão br ? ( ## - ## - #### ).

 

 

Abaixo está o meu código dos métodos ( métodos `adicionar()` , `pesquisar_produtos()` e `setar_campos()` ):
   

  private void adicionar() {

        if ((txtProProduto.getText().isEmpty())
                || (txtProPreco.getText().isEmpty()) || (txtProQuantidade.getText().isEmpty())
                || (jDatProCompra.getDate() == null || (jDatProVencimento.getDate() == null))) {
            JOptionPane.showMessageDialog(null, "Preencha todos os campos obrigatórios.");
        } else {
            String sql = "insert into tbprodutos(produto,preco,quantidade,categoria,compra,validade) values(?,?,?,?,?,?)";
            try {
                pst = connection.prepareStatement(sql);
                pst.setString(1, txtProProduto.getText());
                pst.setString(2, txtProPreco.getValue().toString());
                pst.setString(3, txtProQuantidade.getText());
                pst.setString(4, cboProCategoria.getSelectedItem().toString());
                pst.setDate(5, new java.sql.Date(jDatProCompra.getDate().getTime()));
                pst.setDate(6, new java.sql.Date(jDatProVencimento.getDate().getTime()));

                int adicionado = pst.executeUpdate();
                if (adicionado > 0) {
                    JOptionPane.showMessageDialog(null, "Produto cadastrado com sucesso.");
                    txtProProduto.setText(null);
                    txtProPreco.setText(null);
                    txtProQuantidade.setText(null);
                    cboProCategoria.setSelectedItem(null);
                    jDatProCompra.setDate(null);
                    jDatProVencimento.setDate(null);
                }
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e);
            }

        }
    }

    private void pesquisar_produto() {
        String sql = "select produto,preco,quantidade,categoria,compra,validade from tbprodutos where produto like ?";
        try {
            pst = connection.prepareStatement(sql);
            pst.setString(1, txtProPesquisar.getText() + "%");
            rs = pst.executeQuery();
            tblProdutos.setModel(DbUtils.resultSetToTableModel(rs));

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }
    public void setar_campos() {
        
        int setar = tblProdutos.getSelectedRow();
        txtProProduto.setText(tblProdutos.getModel().getValueAt(setar, 0).toString());
        txtProPreco.setText(tblProdutos.getModel().getValueAt(setar, 1).toString());
        txtProQuantidade.setText(tblProdutos.getModel().getValueAt(setar, 2).toString());
        cboProCategoria.setSelectedItem(tblProdutos.getModel().getValueAt(setar, 3).toString());
        jDatProCompra.setDate((java.sql.Date) tblProdutos.getModel().getValueAt(setar, 4));
        jDatProVencimento.setDate((java.sql.Date) tblProdutos.getModel().getValueAt(setar, 5));
    }

Obrigado à todos!

Link para o comentário
Compartilhar em outros sites

Boa noite Leonardo,

 

Verifica qual é o tipo da coluna onde você está salvando a data, pois isso está me parecendo ser problema de timezone.

 

Por exemplo se no banco estiver usando UTC ou seja GMT 0, e no Java estiver utilizando GMT -3, a data 02/06/2018 no banco vai ser exibida como 01/06/2018 no Java.

 

Caso esse seja o problema a solução vai depender do negocio da sua aplicação, eu sempre prefiro salvar usando UTC no banco de dados e fazer as conversões necessárias na aplicação.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...