Salvar data como String [RESOLVIDO]

Boa noite…

Estou com um pequeno problema… Estou formatando um campo e convertendo-o para String, porem na hora em que salvo no banco de dados, ele não salva a String, ele faz a operação matematica, exemplo,
salvando a data atual (04-04-2016) ele salva no banco "-2016"
Se formato (04/04/2016) ele salva no banco "0.00062003968…"
Qual a saida para isso?

Esse metodo é para pegar a data e a hora… a hora consigo salvar de boa… agora a data ta complicado.

Locale locale = new Locale("pt", "BR");  //localidade para ajustar as horas
        GregorianCalendar calendar = new GregorianCalendar(); //tipo de calendario
        SimpleDateFormat data = new SimpleDateFormat("dd/MM/yyyy", locale);
        SimpleDateFormat hora = new SimpleDateFormat("HH:mm:ss", locale);
        calendar.getTime(); //pega a hora no servidor (host remoto)
        
        
        setData(data.format(calendar.getTime()));
        setHora(hora.format(calendar.getTime()));
        User = usuarioLogado;
        LblData.setText("DATA ABERTURA DO CAIXA: " + getData());
        LblHora.setText("HORARIO LOCAL: " + getHora());

esse é o metodo para salvar no banco:

String sql1 = "INSERT INTO caixa (data, hora, usuario, valor, status) VALUES(" + CaixaValor.getData() + ",'"
                + CaixaValor.getHora() + "','" + CaixaValor.getUsuario() + "','"
                + CaixaValor.getValor() + "','" + CaixaValor.getStatus() + "')";

        try {
            try (Statement statement = connection.createStatement()) {
                statement.execute(sql1);
            }
        } catch (SQLException ex) {

            throw new RuntimeException();
        }

A coluna da tabela em que você adiciona o valor da data é do tipo varchar? Se não, qual tipo é?

Bom dia, Sergio.
Seria interessante você colocar a descrição da sua tabela (como foram definidos os atributos (colunas)), para uma resposta mais objetiva. Imaginando que você tenha usado um atributo do tipo DATE, acredito que o problema é o seguinte, o formato que o banco de dados precisa é YYYY-MM-DD, porém o que você esta fornecendo é DD-MM-YYYY,
Tenta printar na tela o valor da variável após a formatação só para saber se está conforme o padrão do banco(YYYY-MM-DD):

System.out.println(getDate());

Caso não estiver, sera necessário a inversão.
Sua opção seria fazer a alteração no momento que passa o valor da variável para o código SQL, tenta algum método parecido com esse:
Você não informou que tipo é o seu objeto ‘CaixaValor’, por isso vou exemplificar com outro objeto (date), mas caso ele for do tipo Date pode usar ele mesmo.

Crie um objeto do tipo data:

import java.util.Date; //coloque junto as outras importações
Date d = new Date();
String sql1 = “INSERT INTO caixa (data, hora, usuario, valor, status) VALUES(” + d.getYear() + “’-’’”
+ d.getMont() + “’-’” + d.getDay() + “’,’”+ CaixaValor.getHora() + “’,’” + CaixaValor.getUsuario() + “’,’”
+ CaixaValor.getValor() + “’,’” + CaixaValor.getStatus() + “’)”;

Obs: Acredito que o ‘mais’ acima em negrito seja desnecessário.

Espero que tenha ficado clara a explicação!

O problema é que ao montar o SQL você não está colocando a data entre ’ ’ , por isso que o banco está fazendo a conta. Para evitar esse tipo de problema use PreparedStatements com parâmetros.

1 curtida

Ela é do tipo Date… Porem ja tentei tbm como String, sem sucesso.

Bom dia Thiago (creio que seja Thiago rs)
Então, o problema é que nas pesquisas que fiz, o metodo Date esta descontinuado (Deprecated).

Vou tentar agora desse jeito, convertendo ele para esse padrão… vamos ver o que dá.

Ola rmendes… Então, vou tentar tbm usando aspas simples… obrigado.

Assim que fazer todos os testes dou um parecer. Obrigado a todos.

Resolvido da seguinte maneira… talvez seja um pouco porca, mas por hora, foi a solução
Banco de dados esta como Date, no java todas as variaveis estão como String

            Locale locale = new Locale("pt", "BR");  //localidade para ajustar as horas
            GregorianCalendar calendar = new GregorianCalendar(); //tipo de calendario
            SimpleDateFormat data1 = new SimpleDateFormat("dd-MM-yyyy", locale); //define o tipo de data apresentavel 
            SimpleDateFormat data2 = new SimpleDateFormat("yyyy-MM-dd", locale); //define o tipo de data apresentavel 
            SimpleDateFormat hora = new SimpleDateFormat("HH:mm:ss", locale); //define o tipo de data apresentavel 
            setData(data1.format(calendar.getTime()));
            setHora(hora.format(calendar.getTime()));
            DataBD = data2.format(calendar.getTime());

e pra salvar no banco acrescentei as aspas simples

String sql1 = "INSERT INTO caixa (data, hora, usuario, valor, status) VALUES('" + CaixaValor.getData() + "','"
                + CaixaValor.getHora() + "','" + CaixaValor.getUsuario() + "','"
                + CaixaValor.getValor() + "','" + CaixaValor.getStatus() + "')";

Muito obrigado a todos…
Creio que da pra usar em vez do mesmo metodo duas vezes para criar dois formatos de data, de pra fazer isso criando só um e depois modificando o mesmo. Mas por hora a duvida esta sanada.
Abraço.

Acabei de fazer mais um teste aqui… e vi que sera melhor guardar o valor como varchar, sendo assim, só precisava das aspas simples como citado pelo rmendes08.

Obrigado.