Title: Conex
1Conexão com Bancos de Dados
- Carlos Bazilio
- Depto de Ciência e Tecnologia
- Pólo Universitário de Rio das Ostras
- Universidade Federal Fluminense
2Noçã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
3JDBC
- Java Database Connectivity
- Padrão de acesso a BDs 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/pa
ckage-summary.html"
4JDBC Tipos de drivers
- Classe 1 Ponte ODBC-JDBC Aplicações para
Windows com o BD registrado
5JDBC 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.
6JDBC 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
7JDBC 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.
8JDBC 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
9JDBC 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.
10JDBC 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
11JDBC 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.
12JDBC
- 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
13JDBC 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
14JDBC 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
- jdbcpostgresql//localhost 5432/cursodb
- jdbcmysql//localhost3306/cursodb
- login usuário com direitos de acesso ao banco de
dados - senha senha para autenticação.
- Sintaxe geral de urls jdbcltsubprotocolgt//ltserv
ergtltportgt/ltdatabasegt
15JDBC 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
16JDBC Passos Básicos
- Exemplo de estrutura básica de uma aplicação
17import java.sql. public class AcessoBDSimples
public static void main(String args) try
Class.forName("org.postgresql.Driver") Co
nnection con (Connection) DriverManager.getConn
ection ("jdbcpostgresql//localhost5432/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.printl
n("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!")
18Alternativas 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()
19Exercí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.
20Padrõ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.
21Padrões de Projeto (GoF Gang of Four)
22Padrõ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
23Padrões de Projeto Exemplo Façade (Facade,
Fachada)
24Exemplo de Uso do Façade
25Exemplo de Uso do Façade
26import java.util. / "Façade" / class
UserfriendlyDate GregorianCalendar gcal
public UserfriendlyDate(String dataGreg)
String a dataGreg.split("-")
gcal new GregorianCalendar(Integer.valueOf(a0)
.intValue(), Integer.valueOf(a1).i
ntValue()-1, Integer.valueOf(a2).intValue())
public void addDays(int days)
gcal.add(Calendar.DAY_OF_MONTH, days)
public String toString() return new
Formatter().format("1tY-1tm-1td",
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)
27Padrõ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
28Padrõ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
29Padrõ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/inde
x.htm - Destes, podemos destacar o DAO (Data Access
Object)
30Padrõ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)
31Padrões de Projeto - DAO
32DAO 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