Galera, sou iniciante em java, fiz um curso na Caelum e agora que terminei estou praticando os exercícios e fazendo os desafios, também estou alterando o funcionamento de um monte de coisa que tem nos exercícios para treinar e aprender mais coisas.
O problema é o seguinte, tenho uma classe ContatoDAO que possui um metodo para cadastro e para consulta, ambos funcionam perfeitamente, porem os metodos e exemplos que estão nas apostila (pelo menos nessa primeira só no IDE) não são interativos, ou seja, o cadastro é feito digitando os dados diretamente na classe e a consulta da mesma forma, posso até fazer um where, mas dentro do metodo.
O que eu queria fazer era um cadastro personalizado onde fosse digitando os dados manualmente até não querer cadastrar mais, depois de algumas pesquisas aqui no GUJ e também em outros sites consegui fazer, não sei se foi a melhor solução, mas está funcionando perfeitamente. (vou colocar o código abaixo).
Agora estou tentando fazer a consulta, usando parametros, tipo, quando eu rodar o programa ele deve pedir para o usuário digitar o ID ou Nome, ou algum outro dado do contato, e ao digitar essa informação buscar no banco de dados, os dados do contato correspondente, já procurei bastante mas ainda não consegui achar uma forma de fazer isso.
Ficarei muito agradecido se alguem puder me ensinar, ou me indicar um tutorial que ensine, estou muito interessado em aprender Java, e também vou começar a estudar Hibernate (já que muita gente usa e fala muito bem dele) mas por enquanto queria apenas conseguir uma solução para esse problema.
Desde já obrigado.
Abaixo os códigos que já fiz.
ContatoDAO (funcionando perfeitamente, igual ao da apostila com algumas modificações)
[code]public class ContatoDAO {
//conexão com o banco de dados
private Connection connection;
public ContatoDAO() {
this.connection = new ConnectionFactory().getConnection();
}
//Cadastro
public void adiciona(Contato contato) {
String sql = "insert into contatos (nome, email, endereco, dataNascimento) values (?,?,?,?)";
try {
//prepared statemente para inserção
PreparedStatement stmt = connection.prepareStatement(sql);
//seta os valores
stmt.setString(1, contato.getNome());
stmt.setString(2, contato.getEmail());
stmt.setString(3, contato.getEndereco());
stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
//executa
stmt.execute();
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
//Consulta Simples
public List<Contato> getLista() {
try {
List<Contato> contatos = new ArrayList<Contato>();
PreparedStatement stmt = this.connection.prepareStatement("select * from contatos");
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
//Criando o objeto Contato
Contato contato = new Contato();
contato.setNome(rs.getString("nome"));
contato.setEmail(rs.getString("email"));
contato.setEndereco(rs.getString("endereco"));
//Montando a data através do Calendar
Calendar data = Calendar.getInstance();
data.setTime(rs.getDate("dataNascimento"));
contato.setDataNascimento(data);
//Adicionando o objeto a lista
contatos.add(contato);
}
rs.close();
stmt.close();
return contatos;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}[/code]
Classe Inserir padrão da apostila (com os dados digitados direto no metodo e sem a data de nascimento certa)
[code]public class TestaInsere {
public static void main(String[] args) {
//pronto para gravar
Contato contato = new Contato();
contato.setNome("joão");
contato.setEmail("joao@gmail.com");
contato.setEndereco("R. qualquer num 45");
contato.setDataNascimento(Calendar.getInstance());
//Gravar nossa conexao
ContatoDAO dao = new ContatoDAO();
//método elegante
dao.adiciona(contato);
System.out.println("Gravado!");
}
}[/code]
Classe Inserir que eu criei, para digitar os dados manualmente quando o programa executar:
[code]public class TesteInserirManualmente {
public static void main(String[] args) throws IOException, ParseException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Contato contato = new Contato();
String dataRecebida;
Calendar dataNascimento = null;
//Controle do while
String controle = "sim";
while (!controle.equalsIgnoreCase("não")) {
System.out.print("Digite o Nome: ");
contato.setNome(reader.readLine());
System.out.print("Digite o Email: ");
contato.setEmail(reader.readLine());
System.out.print("Digite o Endereço: ");
contato.setEndereco(reader.readLine());
//Lendo a data em texto
System.out.print("Digite a Data: ");
dataRecebida = reader.readLine();
//Convertendo para Date
Date date = new SimpleDateFormat("dd/MM/yyyy").parse(dataRecebida);
//Recebendo a data do tipo Date no Calendar
dataNascimento = Calendar.getInstance();
dataNascimento.setTime(date);
contato.setDataNascimento(dataNascimento);
System.out.println("Você digitou o nome: " + contato.getNome() + ", Email: " + contato.getEmail() +
", Endereço: " + contato.getEndereco() + ", Data: " + dataRecebida);
ContatoDAO dao = new ContatoDAO();
dao.adiciona(contato);
System.out.println("Cadastro efetuado com sucesso!");
System.out.print("Cadastrar mais um Contato? (Sim ou Não) - ");
//leitura da resposta do usuario
controle = reader.readLine();
System.out.println("--------------------------------------------");
System.out.println("Cadastros efetuados com sucesso, Obrigado.");
}
}
}[/code]