API JDBC Paulo Ricardo Lisboa de Almeida 1 Universidade Positivo JDBC JDBC Java Database Connectivity API Java para conexões com bancos de dados Encontrada dentro de java.sql 2 Universidade Positivo JDBC Necessário driver JDBC do banco Classes concretas da API O driver é o responsável por “traduzir” os comandos para o banco 3 Universidade Positivo Criando uma Tabela no Banco de Dados Primeiramente vamos criar uma tabela que representa uma pessoa 4 Universidade Positivo O Driver Manager e a String de Conexão DriverManager – Classe para gerência de drivers JDBC Connection – Interface que representa a conexão com um banco de dados Connection con = DriverManager.getConnection("jdbc:stringConexao", "usuario", "senha"); 5 Universidade Positivo O Driver Manager e a String de Conexão DriverManager – Classe para gerência de drivers JDBC Connection – Interface que representa a conexão com um banco de dados Connection con = DriverManager.getConnection("jdbc:stringConexao", "usuario", "senha"); Obs.: getConnection não funciona sem o driver no BuildPath 6 Universidade Positivo Encerrando a conexão Após o uso, a conexão sempre deve ser encerrada try{ if(connection != null) connection.close(); }catch(Exception e){ e.printStackTrace(); } 7 Universidade Positivo Criando SQLs PreparedStatement Invocado através de Connection Representa uma instrução SQL Liberar os recursos depois da utilização statement.close(); 8 Universidade Positivo Criando SQLs Vamos rodar uma SQL simples e estática diretamente no nosso código: "delete from pessoa where pessoa_id=4" E se quisermos generalizar, para que o usuário digite o id da pessoa que deverá ser removido? 9 Universidade Positivo Criando SQLs Vamos rodar uma SQL simples e estática diretamente no nosso código: "delete from pessoa where pessoa_id=4" E se quisermos generalizar, para que o usuário digite o id da pessoa que deverá ser removido? Poderíamos armazenar o id em uma string e concatenar Exemplo: "delete from pessoa where pessoa_id= " + strID 10 Universidade Positivo Criando SQLs Vamos rodar uma SQL simples e estática diretamente no nosso código: "delete from pessoa where pessoa_id=4" E se quisermos generalizar, para que o usuário digite o id da pessoa que deverá ser removido? Poderíamos armazenar o id em uma string e concatenar Exemplo: "delete from pessoa where pessoa_id= " + strID Problemas? 11 Universidade Positivo Criando SQLs Vamos rodar uma SQL simples e estática diretamente no nosso código: "delete from pessoa where pessoa_id=4" E se quisermos generalizar, para que o usuário digite o id da pessoa que deverá ser removido? Poderíamos armazenar o id em uma string e concatenar Exemplo: "delete from pessoa where pessoa_id= " + strID Problemas? SQL Injection e complexidade no código Para evitar isso, utilizamos parameters 12 Universidade Positivo Criando uma Fábrica de Conexões Criando um Factory de Conexões Porque um factory? 13 Universidade Positivo Criando uma Fábrica de Conexões Criando um Factory de Conexões Porque um factory? Encapsulamento de construção de um objeto complexo 14 Universidade Positivo Criando Beans O Bean deve representar uma entidade Classe Java que expõe propriedades, seguindo uma convenção de nomeclatura simples para os métodos getter e setter. tipo getPropriedade() void setPropriedade(tipo novoValor) Construtor default Os tipos devem ser compatíveis com os armazenados no banco de dados Exemplo: um campo varchar deve ser mapeado para uma String Java, ou para um vetor de caracteres 15 Universidade Positivo Recuperando Informações Armazenadas A interface ResultSet para recuperar informações armazenadas Conjunto de Resultados de uma consulta Inicia com um cursor apontando para a primeira linha Método next() passa para a próxima linha, retornando false se o Resultset não possui mais resultados Liberar os recursos resultSet.close(); 16 Universidade Positivo Criando DAOs Criando DAOS Data Access Object Design Pattern Abstrair e encapsular todos os acessos ao data source 17 Universidade Positivo Criando uma interface IGenericDAO public interface IGenericDAO<T,U> { public void inserir(T objeto) throws Exception; public List<T> listar() throws Exception; public T buscar(U id) throws Exception; public void atualizar(T objeto) throws Exception; public void remover(T objeto) throws Exception; } 18 Universidade Positivo Criando mais algumas tabelas 19 Universidade Positivo Criando uma busca eager Ao carregar um animal, podemos carregar juntamente o seu tipo A maneira mais eficiente de se fazer isso é através de um inner join, em uma única consulta 20 Universidade Positivo Fim! Resolva os exercícios propostos até a próxima aula! 21 Universidade Positivo