Olá desenvolvedores, no tutorial “INNER JOIN: CONSULTANDO DADOS”, fizemos a consulta ao banco de dados em SQL – Structured Query Language, puro. Agora o faremos por meio do JDBC – Java Database Connectivity, com Java. Utilizaremos os mesmos recursos que temos usado até o momento, em outras palavras significa que usaremos o DAO da classe “UserPosDAO”.
Descobrimos que o SELECT * FROM sozinho não mais nos atenderia uma vez que tínhamos que relacionar as duas tabelas existentes na base de dados. Então tínhamos que encontrar um meio de exibir os dados da busca em duas tabelas relacionadas. Então aprendemos a usar o “inner joinI”. Onde o join cumpre a missão de combinar uma ou mais tabelas em um banco de dados relacional.
Dessa forma quando usamos a cláusula inner join podemos obter os dados relacionados das duas tabelas da base de dados “posjava”. Agora o princípio é o mesmo, mas o faremos no Java, com JDBC.
CLASSE MODELO
Como o primeiro passo será a criação de um objeto para armazenar os dados que serão, nome, número de telefone e e-mail. Iremos então criar uma classe/objeto no pacote model. O pacote model representa o padrão de arquitetura MVC – Model-View-Controller. Assim, a classe modelo será a responsável pelo gerenciamento dos dados por meio das regras de negócio. Ela é a ponte entre as camadas de Visão (View) e Controle (Controller).
Para criá-la clique com o botão direto do mouse sobre o pacote model >> New >> Class e dê a classe o nome de “BeanUserFone”. A classe telefone terá como atributo nome, número e-mail todos Strings. Após declarar os atributos gere os métodos setters and getters de todos eles e também o método toString.
Public class Telefone{
private String nome;
private String email;
private String numero;
}
IMPLEMENTANDO DAO
No DAO teremos um método público que implementa uma lista, e que terá como parâmetro o id do usuário – idUser. Veja abaixo como fica a assinatura do método já com a lista instanciada. O método retornará a lista com os dados.
public List<BeanUserFone> listaUserFone (Long idUser){
List<BeanUserFone> beanUserFones = new ArrayList<BeanUserFone>();
return beanUserFones;
}
Agora faremos algo diferente, além de declararmos uma String sql, que recebe a máscara SQL da query, iremos, neste caso concatenar as diversas cláusulas SQL.
String sql = " SELECT nome, numero, tipo, email FROM telefoneuser As fone";
sql += "INNER JOIN userposjava AS userpos";
sql += "on fone.usuariopessoa userpos.id";
sql += "WHERE userpos.id =" +idUser;
Ainda dentro do escopo do método teremos o bloco de tratamento de erros e exceção o bloco try/cacth. O bloco try implementa o objeto PreparedStatement cuja responsabilidade será fazer a busca dos registros. Esta busca será feita a partir do objeto connection invocando a instrução prepareStatement que recebe o sql que instanciamos na linha de código acima. Na sequência “setaremos” os parâmetros.
PreparedStatement statement = connection.prepareStatement(sql);
Os dados que iremos selecionar na tabela serão retornados em uma interface do objeto Java.sql chamada ResultSet. Este ResultSet representa o conjunto de resultados de uma tabela no banco de dados. O ResultSet recebe um statement invocando o método executeQuery(). O método executeQuery() tem como responsabilidade executar uma instrução SQL que retorna um único objeto ResultSet. E por fim retornamos nossa lista
ResultSet resultSet = statement.executeQuery();
Assim, enquanto houver dados no resultSet.next(), a lista será varrida e o objeto instanciado para então ser adicionado a uma lista. Obviamente temos que buscar estes dados antes de adicioná-los a lista. E todo este código estará no escopo do laço de repetição while que por sua vez está dentro do método listar.
BeanUserFone userFone = new BeanUserFone();
userFone.setNome(resultSet.getString("nome"));
userFone.setEmail(resultSet.getString("email"));
userFone.setNumero(resultSet.getString("numero"));
beanUserFones.add(userFone);
IMPLEMENTANDO A CLASSE DE TESTE
E por fim, para rodarmos um teste implementaremos na classe de Teste o método testeInsertTelefone. Onde instanciaremos o objeto telefone, e “setaremos” os respectivos atributos.
public void testeInsertTelefone() {
Telefone telefone = new Telefone();
telefone.setNumero("(21) 9 4545-4545");
telefone.setTipo("CEL");
telefone.setUsuario(12L);
}
Ainda dentro do escopo do método testeInsertTelefone será necessário também a instanciação do objeto DAO, para qual passaremos o objeto telefone.
UserPosDAO dao = new UserPosDAO();
dao.salvarTelefone(telefone);
EM POUCAS PALAVRAS
Aprendemos como implementar uma busca no Java com JDBC utilizando o INNER JOIN. Embora a um primeiro olhar pareça, difícil, salvo algumas exceções, você pode notar que é mais do mesmo. Muito da estrutura se repete, é só estar atento. Da forma como estamos fazendo, primeiro praticando com SQL puro e depois implementando com o Java lhe dará uma boa ideia de como as coisas acontecem nos bastidores. E depois com os frameworks tudo fará sentido. Eu fico por aqui, nos vemos no próximo tutorial.