conexão com bancos de dados

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

Upload: fitzgerald-gardner

Post on 15-Mar-2016

29 views

Category:

Documents


0 download

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Conexão com Bancos de Dados

Conexão com Bancos de DadosConexão com Bancos de DadosCarlos Bazilio

Depto de Ciência e TecnologiaPólo Universitário de Rio das OstrasUniversidade Federal Fluminense

Page 2: Conexão com Bancos de Dados

Noção GeralNoçã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

Page 3: Conexão com Bancos de Dados

JDBCJDBC● 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"

Page 4: Conexão com Bancos de Dados

JDBC – Tipos de driversJDBC – Tipos de drivers● Classe 1: Ponte ODBC-JDBC: Aplicações para

Windows com o BD registrado;

Page 5: Conexão com Bancos de Dados

JDBC – Tipos de drivers – JDBC – Tipos de drivers – Classe 1Classe 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.

Page 6: Conexão com Bancos de Dados

JDBC – Tipos de driversJDBC – Tipos de drivers● Classe 2: Acesso nativo: Usa as bibliotecas client do SGBD;

Aplicação

JDBC Driver Manager

API Nativa do BancoBanco

deDados

Page 7: Conexão com Bancos de Dados

JDBC – Tipos de drivers – JDBC – Tipos de drivers – Classe 2Classe 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.

Page 8: Conexão com Bancos de Dados

JDBC – Tipos de driversJDBC – 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

JDBC Driver Manager

Bancode

Dados

Middleware ou ServidorRede

Page 9: Conexão com Bancos de Dados

JDBC – Tipos de drivers – JDBC – Tipos de drivers – Classe 3Classe 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.

Page 10: Conexão com Bancos de Dados

JDBC – Tipos de driversJDBC – Tipos de drivers● Classe 4: Acesso direto ao servidor

utilizando-se o protocolo do próprio SGBD;

Aplicação

JDBC Driver ManagerBanco

deDados

Rede

Page 11: Conexão com Bancos de Dados

JDBC – Tipos de drivers – JDBC – Tipos de drivers – Classe 4Classe 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.

Page 12: Conexão com Bancos de Dados

JDBCJDBC● 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

Page 13: Conexão com Bancos de Dados

JDBC – Passos BásicosJDBC – 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

Page 14: Conexão com Bancos de Dados

JDBC – Passos BásicosJDBC – 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>”

Page 15: Conexão com Bancos de Dados

JDBC – Passos BásicosJDBC – 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

Page 16: Conexão com Bancos de Dados

JDBC – Passos BásicosJDBC – Passos Básicos● Exemplo de estrutura básica de uma aplicação

Page 17: Conexão com Bancos de Dados

import java.sql.*;public class AcessoBDSimples {

public static void 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!");

} }

}

Page 18: Conexão com Bancos de Dados

Alternativas para Criação Alternativas para Criação de Sentençasde Sentenças

● Statement: executa consultas simples, sem parâmetros● Prepared Statement: executa consultas pré-compiladas

com ou sem parâmetrosPreparedStatement 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 proceduresCallableStatement cs = con.prepareCall ("{call NOME_PROC}");ResultSet rs = cs.executeQuery()

Page 19: Conexão com Bancos de Dados

ExercícioExercí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.

Page 20: Conexão com Bancos de Dados

Padrões de ProjetoPadrõ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.

Page 21: Conexão com Bancos de Dados

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

Page 22: Conexão com Bancos de Dados

Padrões de ProjetoPadrõ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”

Page 23: Conexão com Bancos de Dados

Padrões de Projeto – Padrões de Projeto – Exemplo: Façade (Facade, Exemplo: Façade (Facade,

Fachada)Fachada)

Page 24: Conexão com Bancos de Dados

Exemplo de Uso do FaçadeExemplo de Uso do Façade

Page 25: Conexão com Bancos de Dados

Exemplo de Uso do FaçadeExemplo de Uso do Façade

Page 26: Conexão com Bancos de Dados

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()); } public void addDays(int days) { gcal.add(Calendar.DAY_OF_MONTH, days); } public String toString() {

return new Formatter().format("%1$tY-%1$tm-%1$td", gcal).toString();}}/** "Client" */class FacadePattern { public static void 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); }}

Page 27: Conexão com Bancos de Dados

Padrões de ProjetoPadrõ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

Page 28: Conexão com Bancos de Dados

Padrões de ProjetoPadrões de ProjetoLivro do GoFLivro 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

Page 29: Conexão com Bancos de Dados

Padrões J2EEPadrõ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)

Page 30: Conexão com Bancos de Dados

Padrões de Projeto - DAOPadrõ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)

Page 31: Conexão com Bancos de Dados

Padrões de Projeto - DAOPadrões de Projeto - DAO

Page 32: Conexão com Bancos de Dados

DAO em JavaDAO 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