Top Banner
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
32

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.

Apr 21, 2015

Download

Documents

Internet User
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 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.

Conexão com Bancos de DadosConexão com Bancos de Dados

Carlos Bazilio

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

Page 2: 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 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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Servidor

Rede

Page 9: 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.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

JDBC – Passos BásicosJDBC – Passos Básicos

● Exemplo de estrutura básica de uma aplicação

Page 17: 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.

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

} }

}

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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â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()

Page 19: 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.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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

Page 22: 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.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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

Page 25: 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.

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

Page 26: 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.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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 Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

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

Page 32: 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.

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