boa a noite a todos, estou estudando a apostila fj-21 e estou com uma duvida, como alterar a data no caso contato.setDataNascimento(Calendar.getInstance());?? se ele nao aceita dd/MM/yyyy
Contatocontato=newContato();contato.setNome("Caelum3");contato.setEmail("[email removido]");contato.setEndereco("Rua Vargas Gomes");contato.setDataNascimento(Calendar.getInstance());// aqui quero passar uma data nova... mas como ??contato.setId(newLong(2));ContatoDAOdao=newContatoDAO();dao.Altera(contato);System.out.println("Gravado!!");
pq vc nao larga como tipo Date no banco e formata somente na hora de mostrar?
danilo.silva
Não entendi sua dúvida, como assim uma data nova[/url]? Ta pegando de algum lugar os dados? BD por exemplo?
Copie sua classe inteira pra eu entender o funcionamento e poder te ajudar. Abraços
T
titata
publicclassContatoDAO{privateConnectionconnection;publicContatoDAO(){this.connection=newConnectionFactory().getConnection();}publicvoidadiciona(Contatocontato){Stringsql="insert into contatos (nome, email, endereco, dataNascimento) values (?,?,?,?)";try{PreparedStatementstmt=connection.prepareStatement(sql);stmt.setString(1,contato.getNome());stmt.setString(2,contato.getEmail());stmt.setString(3,contato.getEndereco());stmt.setDate(4,newDate(contato.getDataNascimento().getTimeInMillis()));stmt.execute();stmt.close();}catch(SQLExceptione){thrownewRuntimeException(e);}}publicList<Contato>getLista(){try{List<Contato>contatos=newArrayList<Contato>();PreparedStatementstmt=this.connection.prepareStatement("select * from contatos");ResultSetrs=stmt.executeQuery();while(rs.next()){Contatocontato=newContato();contato.setId(rs.getLong("id"));contato.setNome(rs.getString("nome"));contato.setEmail(rs.getString("email"));contato.setEndereco(rs.getString("endereco"));Calendardata=Calendar.getInstance();data.setTime(rs.getDate("dataNascimento"));SimpleDateFormatdateFormat=newSimpleDateFormat("dd/MM/yyyy");StringhoraFormatada=dateFormat.format(data);// minha duvida tbm está neste trecho em relação ao dateformatdateFormat.format(data);contato.setDataNascimento(data);contatos.add(contato);}rs.close();stmt.close();returncontatos;}catch(SQLExceptione){thrownewRuntimeException(e);}}publicvoidAltera(Contatocontato){Stringsql="update contatos set nome=?, email=?, endereco=?, dataNascimento=?, where id=?";try{PreparedStatementstmt=connection.prepareStatement(sql);stmt.setString(1,contato.getNome());stmt.setString(2,contato.getEmail());stmt.setString(3,contato.getEndereco());stmt.setDate(4,newDate(contato.getDataNascimento().getTimeInMillis()));stmt.setLong(5,contato.getId());stmt.execute();stmt.close();}catch(SQLExceptione){thrownewRuntimeException(e);}}
publicclassTestaConexao{publicstaticvoidmain(String[]args)throwsSQLException{Contatocontato=newContato();contato.setNome("Caelum3");contato.setEmail("[email removido]");contato.setEndereco("Rua Vargas Gomes");contato.setDataNascimento(Calendar.getInstance());// minha duvida é como passar uma data diferente da atual, q está pegando aki.contato.setId(newLong(2));ContatoDAOdao=newContatoDAO();dao.Altera(contato);System.out.println("Gravado!!");
Não seria melhor modificar o atributo private Calendar dataNascimento para private Date dataNascimento na classe Contato?
Pois assim você evitará um grande trecho desnecessário de código durante a formatação dele.
T
titata
Caio é q estou seguindo a rigida os exercicios da lista e la pede Calendar…
Ruivo até q a logica parece ser esta mesmo, mas bem na linha onde vc cita “Trecho modificiado” o objeto contato.setDataNascimento() pede um objeto do tipo Calendar, o date da erro mas o “cal” compila… mas nao funciona… to perdido nesta merda hehe, outro campo q estou confuso é o contato.setId(new Long(2)); // aki eu estou passando o indici de qual emento do banco q vou alterar? pq no meu banco eu tenho id=2| nome=caelum| email= [email removido] e etc…
wbdsjunior
titata:
...
contato.setDataNascimento(Calendar.getInstance()); // minha duvida é como passar uma data diferente da atual, q está pegando aki.
...
tente:
Calendar data = Calendar.getInstance();
data.set(Calendar.YEAR, 1982);
data.set(Calendar.MONTH, 7); // 0 = Janeiro, 1 = Fevereiro, etc
data.set(Calendar.DAY_OF_MONTH, 30);
contato.setDataNascimento(data);
Andersonrms
titata:
Caio é q estou seguindo a rigida os exercicios da lista e la pede Calendar…
Ruivo até q a logica parece ser esta mesmo, mas bem na linha onde vc cita “Trecho modificiado” o objeto contato.setDataNascimento() pede um objeto do tipo Calendar, o date da erro mas o “cal” compila… mas nao funciona… to perdido nesta merda hehe, outro campo q estou confuso é o contato.setId(new Long(2)); // aki eu estou passando o indici de qual emento do banco q vou alterar? pq no meu banco eu tenho id=2| nome=caelum| email= [email removido] e etc…
Ao invés de passar o Date passe o Calendar:
contato.setDataNascimento(cal);
sidney.tavares
Bom dia a todos,
Aproveitando o topico do colega estou no mesmo exercicio e pelo que pude entender do que ele descreveu eu estou com a mesma duvida. Abaixo esta o meu metodo para pesquisa de contato na classe ContatoDAO:
publicList<Contato>getListaContato(){try{List<Contato>contatos=newArrayList<Contato>();PreparedStatementpst=(PreparedStatement)this.con.prepareStatement("select * from contatos");ResultSetrs=pst.executeQuery();while(rs.next()){Contatocontato=newContato();contato.setNome(rs.getString("nome"));contato.setEmail(rs.getString("email"));contato.setEndereco(rs.getString("endereco"));Calendardate=Calendar.getInstance();date.setTime(rs.getDate("dataNascimento"));SimpleDateFormatformato=newSimpleDateFormat("yyyy/MM/dd");formato.format(date);contato.setDataNascimento(date);//adiciona o objeto a listacontatos.add(contato);}rs.close();pst.close();returncontatos;}catch(SQLExceptione){thrownewRuntimeException(e);}}
O meu problema e nao conseguir exibir na saida a data no formato correto quando pesquiso, para inserir esta funcionando corretamente, do jeito que esta quando executo esta classe recebo a exception abaixo:
Lembrando que na sua classe Contato, o campo dataNascimento deve ser String e o que é retornado da Select tem que ser uma Data.
Abs []
[EDIT] trabalho com datas que eu falo, é quando você precisar fazer cálculos complexos em cima de datas…
sidney.tavares
Ola adriano_si, primeiramente valeu pela ajuda, estou usando o Calendar porque a apostila sugere pra eu usar Calendar e eu queria entender, mas vou seguir seu conselho sem deixar de pesquisar o funcionamento da forma que a apostila sugere, senao paro o estudo neste topico e nao consigo produzir, valeu mesmo pela ajuda. Abraco.
rafaelshock
fiz um metodo atualiza será q está certo?
publicvoidatualiza(Contatocontato){Stringsql="UPDATE contatos SET( nome=?, email=?, endereco=?, dataNascimento=?) WHERE nome = ?";try{// prepared statement para inserçãoPreparedStatementstmt=connection.prepareStatement(sql);// seta os valoresstmt.setString(1,contato.getNome());stmt.setString(2,contato.getEmail());stmt.setString(3,contato.getEndereco());Calendardata=Calendar.getInstance();// executa stmt.execute();stmt.close();}catch(SQLExceptione){thrownewRuntimeException(e);}
wbdsjunior
rafaelshock:
fiz um metodo atualiza será q está certo?
publicvoidatualiza(Contatocontato){Stringsql="UPDATE contatos SET( nome=?, email=?, endereco=?, dataNascimento=?) WHERE nome = ?";try{// prepared statement para inserçãoPreparedStatementstmt=connection.prepareStatement(sql);// seta os valoresstmt.setString(1,contato.getNome());stmt.setString(2,contato.getEmail());stmt.setString(3,contato.getEndereco());Calendardata=Calendar.getInstance();// executa stmt.execute();stmt.close();}catch(SQLExceptione){thrownewRuntimeException(e);}
sua pergunta não tem a ver com o tópico. por favor abra uma nova thread.
mas respondendo à sua pergunta: não, não está certo.
seu statement (comando sql) tem 5 parametros (os pontos de interrogação) e você só atribui 3.