Como transformar uma String em uma sql data?

Como posso transformar a String “2000-01-01” na sql data primeiro de janeiro de 2000?

Atenciosamente,
Ronaldo

Converter string data para date

Jonathan, essa forma de conversão funciona para data compatível com o java util date mas dá erro porquê eu quero uma sql date.

Funciona da mesma forma, basta usar o que vem do pacote sql.date ao invés do util.date!

Mas você já sabe fazer isso.
No seu código de outro tópico tem o código a seguir que nitidamente cria um objeto java.util.Date a partir de uma String e em seguida cria um java.sql.Date a partir do java.util.Date.

nova_data = formatoData.parse(tfData_pedido.getText());
java.sql.Date sqlData = new java.sql.Date(nova_data.getTime());
pedidosDAO.pedidoCliente.setData_pedido(sqlData);

Por isso que evito passar código pronto pra você, pois acaba só copiando sem aprender.
:wink:

1 curtida

O que tem de errado no codigo abaixo:

                itemPedidoClienteEstendida.setData_entrega(resultSet.getDate(1));
                java.util.Date inicial = formatoData.parse("2000-01-01");
                java.sql.Date sqlData = new java.sql.Date(inicial.getTime());
                if(itemPedidoClienteEstendida.getData_entrega() > sqlData)) {
                    return true;
                } else {
                    return false;
                };

Veja no print a mensagem de erro. Não posso comparar duas sql datas com o sinal de >? Como devo fazer esta comparação?

Não, vc tem que usar compareTo: Date (Java SE 17 & JDK 17)

Staroski, mas eu não quero pegar a data do computador e sim transformar uma String em data, veja como:

                java.util.Date inicial = formatoData.parse("2000-01-01 00:00:00");
                java.sql.Date sqlData = new java.sql.Date(inicial);

Você pode me explicar porque inicial aparece com um sublinhado vermelho e a seguinte mensagem de erro:

tipos incompatíveis: Data não pode ser convertida em longa

Como eu concerto isto?

Eu sei que não, no seu código do outro tópico você também está transformando uma String em Date, única diferença é que a String está sendo pega de um JTextField.

O colega @hugokotsubo já te respondeu, você não pode comparar Date com < ou > estes operadores são para tipos de dados numéricos.

Objetos Date você compara com métodos, dá uma lida nos métodos da classe, algum deles vai atender sua necessidade.

O problema da comparação já foi resolvido (entendi) agora o erro está na linha de código da mensagem anterior. Repare no que eu escrevi.

O erro está na palavra inicial da linha de comando que eu mandei.

Leia a mensagem que a IDE apresenta ao posicionar o cursor sobre a linha com erro, apenas leia jovem, se tivesse feito isso já teria resolvido os problemas da maior parte das suas dúvidas!

Não tem como saber qual é o problema sem ver o código e erro apresentado.

1 curtida

Olha a documentação da classe java.sql.Date e veja quais construtores ela possui.
Você está tentando chamar um construtor que não existe.

Ok. Entendi, tem que ter .getTime().

Qual o erro na conversão de java.util.Date para java.sql.Date que está no trecho abaixo? O compareTo está afirmando que sqlData é uma data java.util.Date o que quer dizer que a conversão não deu certo. Por favor como devo fazer a conversão da data (“2000-01-01 00:00:00”) em sql.Date?

                itemPedidoClienteEstendida.setData_entrega(resultSet.getDate(1));
                java.util.Date inicial = formatoData.parse("2000-01-01 00:00:00");
                java.sql.Date sqlData = new java.sql.Date(inicial.getTime());
                if(itemPedidoClienteEstendida.getData_entrega().compareTo(sqlData) > 0) {
                    return true;
                } else {
                    return false;
                }

Ronaldo, para obter uma instância de java.sql.Date a partir da string "2000-01-01" não é necessário um formatter. Basta fazer assim:

public class App {
  public static void main(String... args) {
    java.sql.Date sqlDate = java.sql.Date.valueOf("2000-01-01");
    System.out.println(sqlDate);
  }
}

Note que a classe java.sql.Date é uma subclasse de java.util.Date, logo, uma instância de java.sql.Date também é uma instância de java.util.Date e isso não quer dizer que a conversão não deu certo.

Vc disse que o método compareTo está “afirmando que sqlData é uma data java.util.Date”, vc pode explicar melhor o que vc quis dizer com isto? Porque não faz sentido, o método compareTo apenas informa se uma data representa um instante no tempo anterior, posterior ou igual à outra data.

O código abaixo, por exemplo, imprimirá “Data de entrega é posterior a 01/01/2000”.

public class App {
  public static void main(String... args) {
    java.sql.Date sqlDate = java.sql.Date.valueOf("2000-01-01");

    java.sql.Date sqlDateEntrega = java.sql.Date.valueOf("2022-07-04");

    if (sqlDateEntrega.compareTo(sqlDate) > 0) {
      System.out.println("Data de entrega é posterior a 01/01/2000");
    } else {
      System.out.println("Data de entrega é anterior ou igual a 01/01/2000");
    }
  }
}
1 curtida

Desculpe-me, Wellington. De qualquer forma, muito obrigado e eu vou tentar novamente.

Atenciosamente,
Ronaldo

Desculpe-me eu tentei sem o valueOf (por isso não deu certo). Falha minha.

Você pode importar a Bíblioteca
import java.sql.Date;
statement.setDate(new Date(pedido.getDate.timeSet()));

mas acho que não se encaixa com seu problema