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());
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.
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.
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
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.