You are on page 1of 35

Técnicas de Programação Faculdade de Informática/PUCRS 1

TÉCNICAS DE
PROGRAMAÇÃO
Unidade 04
A Camada de Persistência
Técnicas de Programação Faculdade de Informática/PUCRS 2

CAMADA DE
PERSISTÊNCIA
Técnicas de Programação Faculdade de Informática/PUCRS 3

Nesta unidade:
• Visão Geral
• Padrões de Projeto
• DAO e DTO
• Proxy
• Implementação da Persistência em Bancos de
Dados Relacionais
• JDBC
• Transação
• Conceitos Básicos
• Mecanismos de Implementação
• Estratégias de Acesso a Dados
• Bloqueio de Dados (lock)
• Bloqueio Otimista
• Bloqueio Pessimista
Técnicas de Programação Faculdade de Informática/PUCRS 4

Visão Geral
• A camada de persistência é responsável por manter os dados
da aplicação em algum meio de armazenamento não-volátil.
• -> tornar essa funcionalidade transparente para a camada
superior:
• Criar objetos de propósito geral e subsistemas que fornecem serviços
para a aplicação.
• Fornecer métodos para incluir, alterar e excluir objetos da aplicação.
• Fornecer métodos que retornam coleções de objetos,
independentemente da forma como estão persistidos.
• Geralmente são independentes da aplicação e reusáveis entre
diversos sistemas.
• Podem lidar com transações
• Ex.: uma fonte de dados a partir de um SGBD relacional.
• A camada de persistência pode suportar SGBDs de diversos
fabricantes.
Técnicas de Programação Faculdade de Informática/PUCRS 5

Formas comuns de persistência


• Arquivos texto
• TXT
• CSV
• formatos proprietários

• Arquivos binários
• Padrões da indústria
• formatos proprietários

• Bancos de Dados
• Geralmente SGBDs relacionais (linguagem SQL)
Técnicas de Programação Faculdade de Informática/PUCRS 6

Exemplo: Cadastro Editoras


• Um sistema de informação mantem um cadastro de
editoras, com seus respectivos livros e autores
• Sobre esse cadastro, são realizadas operações de
inserção, alteração e remoção de dados
• Os dados possuem as seguintes características:
• Editora – possui código (int) e nome (string); possui diversos livros;
• Livro – possui código (int), título (string) e ano (int); é associado a
somente uma única editora; pode possuir vários autores;
• Autor – possui código (int) e nome composto por primeiro nome
(string) e útimo nome (string); pode ser autor de diversos livros;
Técnicas de Programação Faculdade de Informática/PUCRS 7

Exemplo: Cadastro Editoras


Técnicas de Programação Faculdade de Informática/PUCRS 8

IMPLEMENTAÇÃO DE
PERSISTÊNCIA EM BANCOS
DE DADOS RELACIONAIS
Técnicas de Programação Faculdade de Informática/PUCRS 9

Implementação de Persistência em
Bancos de Dados Relacionais
• Java fornece acesso a bancos de dados através do
JDBC (Java Database Connectivity)
• É uma API Java para suporte à execução de comandos SQL -
Structured Query Language.
• Permite o envio de comandos para qualquer tipo de Banco de
Dados Relacional.

Aplicação Java

JDBC

SQL-Server Oracle MySQL ...


Técnicas de Programação Faculdade de Informática/PUCRS 10

JDBC
• Estabelece conexões com o BD
• Envia requisições SQL
• Processa os resultados

driver
SQL
JDBC SGBD
Protocolo proprietário
do Sistema Gerenciador
do Banco de Dados
Técnicas de Programação Faculdade de Informática/PUCRS 11

JDBC
Técnicas de Programação Faculdade de Informática/PUCRS 12

Adendo: ODBC
• O que é ODBC?
• Open Database Conectivity

• ODBC é uma API de acesso a banco de dados definida pela


Microsoft para permitir acesso genérico a diferentes sistemas de
bancos de dados na plataforma Windows

• Oferece a habilidade de se conectar com praticamente todas as


plataformas de banco de dados.

• ODBC pode ser utilizada a partir de uma aplicação Java.


• Utiliza-se o ODBC na forma de uma ponte JDBC-ODBC.
Técnicas de Programação Faculdade de Informática/PUCRS 13

API JDBC
• JDBC é a interface padrão para acesso a bancos de
dados relacionais em Java.

• O que faz o JDBC?


• Estabelece conexão com o banco de dados.
• Executa comandos SQL.
• Obtém os resultados.

• Disponível no pacote java.sql


• import java.sql.*;
Técnicas de Programação Faculdade de Informática/PUCRS 14

Como utilizar o JDBC?


Abrir conexão

Executar
comandos SQL

Processar
resultados

Fechar conexão
Técnicas de Programação Faculdade de Informática/PUCRS 15

Componentes conceituais envolvidos:


• Driver Manager
• Carrega drivers do banco de dados e gerencia as conexões entre a
aplicação e o driver.
• Driver
• Traduz chamadas da API em operações de uma base de dados
específica.
• Connection
• Sessão entre a aplicação e o banco de dados.
• Statement
• Comando SQL.
• Result Set
• Conjunto lógico de colunas e linhas de dados retornados pela
execução de um comando de consulta.
• Metadata
• Informação sobre dados retornados, base de dados e driver.
Técnicas de Programação Faculdade de Informática/PUCRS 16

Classes envolvidas:
• DriverManager
• Provê acesso aos drivers JDBC.

• Connection
• Representa uma conexão com o BD.

• Statement
• Fornece suporte para a execução dos comandos SQL.

• ResultSet
• Representa o objeto resultante de uma consulta ao BD, composto de
um cursor que aponta para as linhas da tabela resultante.
Técnicas de Programação Faculdade de Informática/PUCRS 17

Driver
Connection Statement ResultSet
Manager cria cria obtém

SQL dados

Driver
Estabelece link
com o BD

BD
Técnicas de Programação Faculdade de Informática/PUCRS 18

Usando JDBC em um programa Java


1. Importar classes necessárias;
2. Carregar driver JDBC;
3. Identificar fonte de dados (localização do banco de
dados);
4. Alocar um objeto Connection;
5. Alocar um objeto Statement;
6. Executar uma consulta usando o objeto Statement;
7. Recuperar dados do objeto ResultSet retornado;
8. Fechar ResultSet;
9. Fechar objeto Statement;
10. Fechar objeto Connection;
Técnicas de Programação Faculdade de Informática/PUCRS 19

• Estágio 1: abrir conexão

Abrir conexão Registrar driver

Executar
Conectar ao BD
comandos SQL

Processar
resultados

Fechar conexão
Técnicas de Programação Faculdade de Informática/PUCRS 20

• Registrar driver:

• Através do DriverManager

• Cada tipo de SGBD possui um driver fornecido pela empresa


• org.apache.derby.jdbc.EmbeddedDriver
• org.apache.derby.jdbc.ClientDriver

• Java fornece o driver ponte JDBC-ODBC


• sun.jdbc.odbc.JdbcOdbcDriver

• Para registrar o driver


• através do método forName() de Class
• Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Técnicas de Programação Faculdade de Informática/PUCRS 21

• Conectar ao banco de dados:


• Java utiliza uma string de conexão para endereçar o
BD
• Formato:
protocolo:<subprotocolo>:<subnome>
• protocolo utilizado é jdbc
• subprotocolo é o nome do driver ou mecanismo de conexão
utilizado. Cada empresa de BD registra um nome único para seu
driver. Ex.: oracle, odbc.
• subnome identifica o banco de dados. A estrutura deste campo é
diferente para cada tipo de driver utilizado. Ex.: no caso da
Oracle o campo é <driver>@<bancodados>, onde driver é o
driver utilizado na conexão e bancodados identifica a localização
do BD.
• Exs.:
• jdbc:derby:cadastro, onde cadastro é o nome da base de dados.
• jdbc:oracle:thin:@ntwk11:1521:BD1
Técnicas de Programação Faculdade de Informática/PUCRS 22

• Abrir conexão usando getConnection() de DriverManager

• O método retorna um objeto Connection


• Connection conn = DriverManager.getConnection(
stringConexao, idUsuario, senhaUsuario);
• Connection conn = DriverManager.getConnection(
stringConexao);

• Exs:
• Connection com = DriverManager.getConnection(
"jdbc:odbc:bd1",“user","s1234s");

• Connection com = DriverManager.getConnection(


"jdbc:odbc:bd1");
Técnicas de Programação Faculdade de Informática/PUCRS 23

• Estágio 2: consultar

Abrir conexão

Executar
Criar um comando
comandos SQL

Processar Enviar comando ao BD


resultados

Fechar conexão
Técnicas de Programação Faculdade de Informática/PUCRS 24

• Criar um comando:

• Objeto Statement irá conter e enviar um comando SQL para


o banco de dados

• Cria-se um comando sobre uma conexão usando seu método


createStatement()
• Statement comando = conexao.createStatement();

• Java possui outros tipos de statements:


• PreparedStatement - para comandos SQL pré-compilados
• CallableStatement - para comandos SQL que executam
rotinas armazenadas no BD (stored procedures)
Técnicas de Programação Faculdade de Informática/PUCRS 25

• Envio de comando SQL:

• O objeto statement possui três métodos para executar um


comando SQL:

• executeQuery(string) - para comandos de consulta. Retorna


um objeto ResultSet com a(s) linha(s) resultante(s) da consulta.

• executeUpdate(string) - para comandos INSERT, UPDATE,


DELETE, ou comandos da DDL. Retorna um inteiro com o número
de linhas alteradas pelo comando.

• execute(sql) - para qualquer tipo de comando. Retorna true se


o resultado é um objeto ResultSet e false caso contrário.
Técnicas de Programação Faculdade de Informática/PUCRS 26

• Ex.:
• ResultSet resultado = comando.executeQuery(
"SELECT * FROM autores");

• String sql = "INSERT INTO


autores(codigo,primeironome,ultimonome)
VALUES(?,?,?)";
• PreparedStatement comando =
conexao.prepareStatement(sql);
• comando.setInt(1, 1);
• comando.setString(2, "a");
• comando.setString(3, "b");
• ResultSet resultado = comando.executeUpdate();
Técnicas de Programação Faculdade de Informática/PUCRS 27

• Estágio 3: processar resultados

Abrir conexão

Executar
comandos SQL Obter um result set

Processar
resultados Percorrer resultado

Atribuir os resultados
Fechar conexão a variáveis
Técnicas de Programação Faculdade de Informática/PUCRS 28

• Manipulação dos resultados:

• Um objeto ResultSet é um tipo de “apontador” para as linhas


da tabela resultado da consulta.

• Método next() obtém uma a uma as linhas da tabela.


Retorna falso quando terminam as linhas da tabela.

• Obter os dados utilizando métodos getXXX() (getString(),


getInt(), etc) para cada tipo de dado, informando o nome ou
número da coluna (a partir de 1).
Técnicas de Programação Faculdade de Informática/PUCRS 29

• Tipos de dados Java X SQL

Ansi SQL Java Métodos


CHAR, VARCHAR2 java.lang.String getString()
LONGVARCHAR java.io.InputStream getAsciiStream()
NUMERIC, DECIMAL java.math.BigDecimal getBigDecimal()
BIT boolean getBoolean()
TINYINT byte getByte()
SMALLINT short getShort()
INTEGER int getInt()
BIGINT long getLong()
REAL float getFloat()
DOUBLE, FLOAT double getDouble()
BINARY, VARBINARY byte[ ] getBytes()
LONGVARBINARY java.io.InputStream getBinaryStream()
DATE java.sql.Date getDate()
TIME java.sql.Time getTime()
TIMESTAMP java.sql.Timestamp getTimestamp()
Técnicas de Programação Faculdade de Informática/PUCRS 30

• Ex.:
• while (rs.next()){
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}

• Cuidado! Problemas podem acontecer quando o campo da


tabela estiver vazio. Java não consegue atribuir um valor null
para um primitivo.

• Por exemplo, no caso de getInt() retorna 0 se a coluna tem valor


null na tabela!

• Testar com o método wasNull()

int x = rs.getInt(“a”);

if (rs.wasNull()){...}
Técnicas de Programação Faculdade de Informática/PUCRS 31

• Estágio 4: fechar conexão

Abrir conexão

Consultar Fechar o result set

Processar
resultados Fechar o statement

Fechar conexão Fechar a conexão


Técnicas de Programação Faculdade de Informática/PUCRS 32

• Fechar a conexão:

• Utilizamos o método close() para fechar os objetos


ResultSet, Statement e Connection.

• Este método libera os recursos alocados pelos objetos

• Ex.:
• resultado.close();
• comando.close();
• conexao.close();
Técnicas de Programação Faculdade de Informática/PUCRS 33

• Exceções do JDBC:

• Quando utilizamos o JDBC, todos os métodos de acesso ao


BD geram uma exceção SQLException quando algo sai
errado.

• Esta exceção tem diversos métodos úteis:

• getMessage() - retorna uma string descrevendo o erro

• getErrorCode() - retorna o código do erro específico gerado


pelo driver de acesso

• getSQLState() - retorna informação de estado sobre o erro


associado
Técnicas de Programação Faculdade de Informática/PUCRS 34

Exemplo: Cadastro Editoras


• Observe a implementação dos métodos na classe
AutorDAOderby
• Qual seria a implicação de se utilizar um código de Autor
que seja autogerado pelo SGBD?
Técnicas de Programação Faculdade de Informática/PUCRS 35

You might also like