Utilizando tipo Date

4 respostas
B

Estou iniciando no Java agora e não estou sabendo como trabalhar com datas. Será que poderiam me ajudar???
Tenho um método chamado insereCliente:

public boolean insereCliente(Cliente c) throws Exception {

String sql =    "INSERT INTO CLIENTE (ID, NOME, DT_INICIO, DT_FINAL) " +                            
                    "VALUES (?, ?, ?, ?)";
    
    sqlInsereCliente = connection.prepareStatement(sql);

    sqlInsereCliente.setInt(1, c.getId());
    sqlInsereCliente.setString(2, c.getNome());
    sqlInsereCliente.setDate(3, c.getDataInicio());
    sqlInsereCliente.setDate(4, c.getDataFinal());

            
    result = sqlInsereCliente.executeUpdate();        
            
    /**
    *Se for difirente de 0, efetuou a inclusão ok
    */
    if ( result != 0 ) 
        return true;
    else
        return false;    
    
}

Criei uma classe main com as instruções abaixo para testar a inclusão onde tentei passar os parâmetros, mas não estou conseguindo. Está dando erro com as datas.
No próprio método insereCliente, quando coloco sqlInsereCliente.setDate(3, c.getDataInicio()); já dá um erro!

Cliente c = new Cliente();

c.insereCliente(100, "JULIO", 01/02/2005, 10/02/2005");   <-- Como devem ser passadas as datas?

Qual o tratamento que devo fazer dentro do método insereCliente para o tratamento das datas?

Testei também, ao invés de passar para o método insereCliente o parâmetro cliente, passei um a um:

insereProjeto(int projeto, String nome, java.sql.Date dt_inicio, java.sql.Date dt_final)

Dessa forma, não deu erro dentro do método mas mesmo assim não consigo passar os parâmetros para testar.

Alguém poderia me ajudar com isso?

4 Respostas

T

Vamos olhar o Javadoc…

O tipo java.sql.Date tem um método

static Date 	valueOf(String s)
          Converts a string in JDBC date escape format to a Date value.

E o “JDBC data escape format” é:

date escape format yyyy-mm-dd

Ou seja, para obter um java.sql.Date você pode usar valueOf, com o formato ano-mês-dia.

Isso quer dizer que você poderia ter feito algo como:

c.insereCliente(100, "JULIO", java.sql.Date.valueOf("2005-02-01"), java.sql.Date.valueOf ("2005-02-10"))
danieldestro

barbinha, no método setDate() do PreparedStatement você deve passar um java.sql.Date, que na verdade é uma subclasse de java.util.Date.

Para fazer o que quer, faça assim:

sqlInsereCliente.setDate(3, new java.sql.Date(c.getDataInicio().getTime()) );

No caso de passagem de parâmetros que você falou depois, você não pode passar uma String para um Date. Você deveria fazer as transformações necessárias, por exemplo:

java.util.Date d = new SimpleDateFormat(“dd/MM/yyyy”).parse(“01/01/2005”);
seuMetodoQueRecebeUmDate( d );

É isso aí!

B

Coloquei conforme explicou:

sqlInsereCliente.setInt(1, c.getId());

sqlInsereCliente.setString(2, c.getNome());

sqlInsereCliente.setDate(3, new java.sql.Date(c.getDataInicio().getTime()) );

sqlInsereCliente.setDate(4, new java.sql.Date(c.getDataFinal().getTime()) );

E quando for testar, terei que passar a data como? Ainda não consigo testar.
Agora estou só testando, passando os valores na mão, mas essas datas serão passadas em uma página jsp. Como seria isso?

Obrigada.

danieldestro

Você chegou a ler minha mensagem?

Abaixo eu estou transformando uma String em Date:

danieldestro:
java.util.Date d = new SimpleDateFormat(“dd/MM/yyyy”).parse(“01/01/2005”);
seuMetodoQueRecebeUmDate( d );

Criado 22 de fevereiro de 2005
Ultima resposta 22 de fev. de 2005
Respostas 4
Participantes 3