Olá senhores,
estou fazendo os exercícios da apostila fj21 da caelum. Só que dessa vez resolvi implentar todos os códigos com o bd Oracle no lugar no MySQL. para variar um pouquinho.
Lembrando que os exercícios de teste de conexão e inserção de dados no Oracle, estão funcionando.
Mas para recuperar os dados tenho erro quando tento recuperar campos Date e convertê-los em Calendar. Com instruções sql recupero todos os outros campos.
Com o MySQL todos os códigos funcionam, então não sei o q fazer.
a estrutura da tabela no mysql e no oracle é:
publicList<Contato>getLista(){try{List<Contato>contatos=newArrayList<Contato>();PreparedStatementstmt=this.conn.prepareStatement("select * from contatos");ResultSetrs=stmt.executeQuery();while(rs.next()){// criando o objeto ContatoContatocontato=newContato();contato.setId(rs.getLong("id"));contato.setNome(rs.getString("nome"));contato.setEmail(rs.getString("email"));contato.setEndereco(rs.getString("endereco"));// montando a data através do CalendarCalendardata=Calendar.getInstance();data.setTime(rs.getDate("dataNascimento"));contato.setDataNascimento(data);// adicionando o objeto à listacontatos.add(contato);}rs.close();stmt.close();returncontatos;}catch(SQLExceptione){thrownewDAOException(e);}}
E pq vc quer usar Calendar no atributo? geralmente se usa Date
O
Ofidomundo
Primeiro, essa forma já esta ultrapassada, o correto seria usar o Java.Time.*;
Dessa forma:
DateTimeFormatterformatter=DateTimeFormatter.ISO_LOCAL_DATE_TIME;// Verificar o formatoLocalDateld=LocalDate.parse((rs.getString(1)),formatter);
R
Rodrigo_Void1 like
E sua sugestão seria buscar a data como string do banco e fazer parse só pra usar o tipo novo?
O
Ofidomundo
buscar como string foi só a forma que eu achei mais fácil, pois, inclusive usando date eu transformava em string.
hoje eu uso string tanto para buscar quanto para adicionar, porem no meu banco esta classificado como date.
(em termos de processo da na mesma string e date na requisição)
D
Diego_Leal
Não sei se está tão ultrapassado, pois é as apostilas da caelum sempre são bem atualizadas.
Mas de qualquer forma eu agradeço.
Só não entendi porque no MySQL funciona e no Oracle não.
to usando o java 1.8.0_181
driver oracle ojdbc14-10.2.0.4.0.jar
Uso o eclipse e oracle 10g.
D
Diego_Leal
hahahaha, isso aí não vale.
Mas tá funcionando, sera que é o driver do oracle?
O
Ofidomundo
primeiro gostaria de dizer que a classe calendar ainda pode ser usada, eu só me confundi com uma outra antiga, segunda coisa é que essa é a forma mais “eficaz” que eu conheço e terceiro, você pode usar a classe date do próprio jdbc para não fazer essa transição toda.
D
Diego_Leal
Não posso mecher nos atributos(mudar de Calendar para Date), tem que ficar Calendar mesmo, porque podera comprometer outros exercícios. Como ficaria usando a propria classe date? Não entendi.
O
Ofidomundo
é a classe do objeto retornado por: rs.getDate(“dataNascimento”), mas como disse, você teria que mudar o projeto. E talvez esse deva ser o erro, o método rs.getDate() do mysql deve retornar calendar enquanto o Oracle retorna um Date!
D
Diego_Leal1 like
Não é não.
quando executo getDate(“dataNascimento”) sem atribuir a variavel alguma ou usar no Calendar.setTime, o erro ocorre. só funciona o método getString. Aí converto para date e depois seto no Calendar. Ou seja tenho que converter pra String primeiro, porque getDate da erro.
No mySQL eu uso o getDate e depois Calendar data … data.setTime(o resultado de getDate. Ele devolve Date mesmo.
O
Ofidomundo
entendi…
D
darlan_machado
Independente de qual SGBD você está usando, o que vai contar é como a API do JDBC foi implementada pelo driver especificado para a conexão.
Assim sendo, você vai, para campos do tipo DATE, usar o método getDate da interface ResultSet. Este método devolve um objeto de java.sql.Date.
Esta classe estende a classe java.util.Date, logo, ela herda todos os métodos públicos desta classe, incluindo, o método getTime(), que devolve um long representando a data especificada.
Uma dessas opções pode resolver.
Porém, seria mais indicado tentar usar as novas opções oferecidas pela API de datas do java, nas versões 8 e superiores.