1 / 32

Conexão com Bancos de Dados

Conexão com Bancos de Dados. Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense. Noção Geral. A aplicação chama a biblioteca JDBC A biblioteca carrega o driver que “entende” o SGDB

Download Presentation

Conexão com Bancos de Dados

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Conexão com Bancos de Dados Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense

  2. Noção Geral • A aplicação chama a biblioteca JDBC • A biblioteca carrega o driver que “entende” o SGDB • Após, a aplicação pode se conectar e enviar requisições ao SGBD • Pacote principal: java.sql

  3. JDBC • Java Database Connectivity; • Padrão de acesso a BD’s relacionais através de Java: • API comum; • Os fabricantes de drivers JDBC implementam aspectos específicos; • Qualquer aplicação Java pode acessar um SGBD através do JDBC; • JDBC é semelhante ao ODBC, mas é escrito em Java. • "http://java.sun.com/javase/6/docs/api/java/sql/package-summary.html"

  4. JDBC – Tipos de drivers • Classe 1: Ponte ODBC-JDBC: Aplicações para Windows com o BD registrado;

  5. JDBC – Tipos de drivers – Classe 1 • ODBC fornece uma interface uniforme para que aplicações em Windows acessem bancos de dados de fornecedores diferentes; • O JDK é distribuído com um driver desse tipo; • Uma aplicação que utilize este drive se comunica indiretamente com o banco de dados através da ponte JDBC-ODBC; • Este uso requer código nativo de acesso ao banco na máquina cliente.

  6. JDBC – Tipos de drivers • Classe 2: Acesso nativo: Usa as bibliotecas client do SGBD; Aplicação JDBC Driver Manager Banco de Dados API Nativa do Banco

  7. JDBC – Tipos de drivers – Classe 2 • Drivers híbridos, parcialmente escritos em Java, mas que também utilizam código nativo; • Usualmente, são drivers nativos com um wrapper Java; • Por utilizarem código nativo, também são menos portáveis.

  8. JDBC – Tipos de drivers • Classe 3: Acesso por middleware: Não há necessidade de configuração da máquina cliente. A aplicação se comunica com o middleware através de sockets. O middleware converte a chamada de alto nível da API na chamada ao SGBD; Aplicação Rede Middleware ou Servidor JDBC Driver Manager Banco de Dados

  9. JDBC – Tipos de drivers – Classe 3 • Chamadas ao banco de dados através da rede, utilizando HTTP; • A interação real com o banco de dados estaria entre os servidores de middleware e banco de dados; • A aplicação é 100% Java.

  10. JDBC – Tipos de drivers • Classe 4: Acesso direto ao servidor utilizando-se o protocolo do próprio SGBD; Aplicação Banco de Dados Rede JDBC Driver Manager

  11. JDBC – Tipos de drivers – Classe 4 • Drivers 100% Java; • São portáveis e mais eficientes se comparados com os que exigem tradução; • Diferentemente dos drivers da classe 3, estes implementam o acesso ao servidor utilizando bibliotecas da própria linguagem Java.

  12. JDBC • 5 passos básicos: • Registrar o driver na aplicação • Conectar no SGBD • Executar sentenças SQL e procedures • Processar o resultado recebido • Fechar a conexão • Principais classes da API: • DriverManager, Connection, Statement, ResultSet • Referência: http://java.sun.com/javase/6/docs/api/java/sql/package-summary.html

  13. JDBC – Passos Básicos • Registro do driver: O driver é registrado automaticamente quando a classe é carregada na aplicação; • Class.forName("org.postgresql.Driver"); // PostgreSQL • Class.forName("com.mysql.jdbc.Driver"); // MySQL • Inicializador estático que registra o driver

  14. JDBC – Passos Básicos • Conexão com o SGBD: Após o registro do driver, precisamos fornecer informações ao DriverManager para a conexão; • Connection con = DriverManager.getConnection(url, login, senha); • url: URL de conexão JDBC • jdbc:postgresql://localhost: 5432/cursodb • jdbc:mysql://localhost:3306/cursodb • login: usuário com direitos de acesso ao banco de dados; • senha: senha para autenticação. • Sintaxe geral de urls: “jdbc:<subprotocol>://<server>:<port>/<database>”

  15. JDBC – Passos Básicos • Execução de sentenças SQL • Para a execução de sentenças devemos criar, por exemplo, um Statement e obter o resultado através de um ResultSet; • Statement stmt = con.createStatement(); • ResultSet rs = stmt.executeQuery(“select * from db.empregados e”); • Neste caso, o resultado é armazenado num ResultSet e pode ser percorrido com métodos definidos nesta classe

  16. JDBC – Passos Básicos • Exemplo de estrutura básica de uma aplicação

  17. import java.sql.*; publicclass AcessoBDSimples { publicstaticvoid main(String[] args) { try { Class.forName("org.postgresql.Driver"); Connection con = (Connection) DriverManager.getConnection ("jdbc:postgresql://localhost:5432/cursodb","bazilio","bazilio"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("select * from prod p;"); while (rs.next()) { System.out.print("Nome: " + rs.getString("PNAME")); System.out.println("Cidade: " + rs.getString("CITY")); } stmt.close(); con.close(); } catch (ClassNotFoundException e) { System.out.println("A classe do driver de conexão não foi encontrada!"); } catch (SQLException e) { System.out.println("O comando SQL não pode ser executado!"); } } }

  18. Alternativas para Criação de Sentenças • Statement: executa consultas simples, sem parâmetros • Prepared Statement: executa consultas pré-compiladas com ou sem parâmetros PreparedStatement modificaTabela = con.prepareStatement ("UPDATE TABELA SET CAMPO1 = ? WHERE CAMPO2 LIKE ? "); modificaTabela.setInt(1, 75); modificaTabela.setString(2, “Sirius”); modificaTabela.executeUpdate(); • Callable Statement: executa chamadas à stored procedures CallableStatement cs = con.prepareCall ("{call NOME_PROC}"); ResultSet rs = cs.executeQuery()

  19. Exercício • Gere 1 tabela contendo os dados básicos de uma conta, insira manualmente (no SGBD) alguns clientes e liste estes clientes utilizando um programa em Java.

  20. Padrões de Projeto • Um padrão de projeto é uma solução comum para um problema comum encontrado no desenvolvimento de software (Sun); • Sedimentação do conceito com o lançamento do livro: “Design Patterns: Elements of Reusable Object-Oriented Software”; • Não está amarrado à nenhuma linguagem OO.

  21. Padrões de Projeto (GoF – Gang of Four)

  22. Padrões de Projeto • A utilização desses padrões usualmente implica em algumas vantagens: • Facilidade de comunicação: padrões possuem nomes, os quais resumem uma solução que deve ser de conhecimento comum entre equipes de desenvolvimento; • Credibilidade: sua implementação estará utilizando soluções amplamente testadas e aprovadas; • Facilidade de manutenção: padrões tendem a reduzir o acoplamento entre componentes, o que implica num sistema de fácil manutenção • Não implica em códigos “mais enxutos”

  23. Padrões de Projeto – Exemplo: Façade (Facade, Fachada)

  24. Exemplo de Uso do Façade

  25. Exemplo de Uso do Façade

  26. import java.util.*; /** "Façade" */ class UserfriendlyDate { GregorianCalendar gcal; public UserfriendlyDate(String dataGreg) { String[] a = dataGreg.split("-"); gcal = new GregorianCalendar(Integer.valueOf(a[0]).intValue(), Integer.valueOf(a[1]).intValue()-1, Integer.valueOf(a[2]).intValue()); } publicvoid addDays(int days) { gcal.add(Calendar.DAY_OF_MONTH, days); } public String toString() { returnnew Formatter().format("%1$tY-%1$tm-%1$td", gcal).toString();} } /** "Client" */ class FacadePattern { publicstaticvoid main(String[] args) { UserfriendlyDate d = new UserfriendlyDate("1980-08-20"); System.out.println("Date: "+d); d.addDays(20); System.out.println("20 days after: "+d); } }

  27. Padrões de Projeto • Usualmente são apresentados seguindo uma estrutura bem definida, como: • Nome do padrão para facilitar a citação • Descrição do uso, apresentando o problema, contextualização e implicações • Solução para o problema apresentado, usualmente apresentada no formato de diagramas • Exemplo: • Nome: Façade • Descrição: Necessário quando temos um conjunto de subsistemas e algumas funcionalidades como combinação destes subsistemas • Solução

  28. Padrões de ProjetoLivro do GoF • Creational Patterns • Factory, Abstract Factory, Singleton, Builder, Prototype • Structural Patterns • Adapter, Bridge, Composite, Decorator, Façade, Flyweight, Proxy • Behavioral Patterns • Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Momento, Observer, State, Strategy, Template, Visitor

  29. Padrões J2EE • Inspiraram o surgimento de diversos “novos” padrões, os quais são comumente associados à linguagem Java • Entretanto, assim como os da GoF, não estão amarrados à nenhuma linguagem OO específica • http://www.corej2eepatterns.com/Patterns2ndEd/index.htm • Destes, podemos destacar o DAO (Data Access Object)

  30. Padrões de Projeto - DAO • Visa a separação entre a lógica de acesso a dados da lógica do negócio; • Com este padrão podemos utilizar diferentes fontes de dados e isolar a lógica de negócio de possíveis modificações na camada de acesso a dados; • Ou seja, um DAO deve esconder todos os detalhes de implementação de acesso a fontes de dados. • Pode ser utilizada em diversos cenários (web, desktop, mobile, em aplicação distribuída ou centralizada)

  31. Padrões de Projeto - DAO

  32. DAO em Java • Neste caso, o padrão DAO é bastante útil para separar a lógica de negócio das diversas tecnologias de persistência existentes: • JDBC, JDO, EJB CMP, TopLink, Hibernate, iBATIS, openJPA e muitas outras • Ou seja, com este padrão permitimos que estas tecnologias possam ser substituídas ou atualizadas sem prejuízo ao restante da aplicação

More Related