Sunteți pe pagina 1din 43

Persistncia Java

Prof. Flavia Garcia


SENAC RIO

Introduo
Uma das caractersticas mais importantes de
uma aplicao WEB est no fato de podermos
salvar as informaes em algum lugar para que
as
informaes
sejam
recuperadas
futuramente.
Uma aplicao, por exemplo, est salva em
algum banco de dados e quando voc acessa
pelo seu navegador, uma aplicao WEB ir
recuperar as informaes de algum banco de
dados e criar uma pgina para voc.

Introduo

Persistncia a capacidade de armazenar


informaes em "algum lugar", e poder
recuperar essa informao quando quiser.
Nas aplicaes modernas usa-se o conceito de
transparncia na persistncia, que voc
prover uma interface simples para persistir seus
dados, no importando como isso feito (a
implementao).

Persistncia de Objetos

A Persistncia de Objetos o armazenamento


consistente de objetos de uma aplicao o.o.
para que estes objetos existam em diferentes
execues de diferentes aplicaes.

O.O. + B.D. , quadro atual


Problema: Temos um aplicativo o.o. que precisa
interagir com um banco de dados. O que fazer?
Os bancos de dados o.o. ainda tm grandes
desvantagens em relao aos relacionais.
O padro vigente nas empresas o banco de
dados relacional, e sem uma perspectivas de
mudana.

Como voc v as alternativas aos bancos de dados


relacionais, como bancos de dados OO?
Ns no vemos
-Gavin King, criador do Hibernate.

Mapeamento OR, a soluo.

O Mapeamento Objeto-Relacional (OR) a


soluo para o problema.

O Mapeamento OR uma tcnica de


desenvolvimento que consiste em representar
o objeto de maneira relacional na gravao do
banco de dados, e consegue fazer o caminho
inverso sem perder informao.

Mapeamento OR, como?

O mapeamento OR tem 3 componentes

Modelo Orientado a objetos, que o modelo o.o.


em que os dados esto representados na
aplicao,
Persistncia Fsica, o modelo relacional em que os
dados sero armazenados.
Persistncia Lgica, que traduz o modelo o.o.
para a maneira que eles sero armazenados na
persistncia fsica, e vice-versa.

Diagrama

MODELO
ORIENTADO
A OBJETOS

PERSITNCIA
LGICA

PERSITNCIA
FSICA

JDBC
O que JDBC
Pode-se dizer que uma API que rene
conjuntos de classes e interfaces escritas na
linguagem Java na qual possibilita se conectar
atravs de um driver especfico do banco de
dados desejado. Com esse driver pode-se
executar instrues SQL de qualquer tipo de
banco de dados relacional.
Para fazer a comunicao entre a aplicao e o
SGBDs necessrio possuir um driver para a
conexo desejada. Geralmente, as empresas de
SGBDs oferecem o driver de conexo que

JDBC

O que um Driver
Alm de atuar como uma interface entre os
SGBDs e as aplicaes, tambm pode ser
considerado como um tradutor que ajuda na
definio das mensagens binrias trocadas com
um protocolo de um SGBD.

JDBC - Classe DriverManager

Cada driver que se deseja a usar precisa ser


registrado nessa classe, pois oferece mtodos
estticos para gerenciar um driver JDBC.
Para a aplicao reconhecer a comunicao
com o banco de dados escolhido, preciso
obter um arquivo com a extenso .jar que
geralmente se consegue atravs dos sites das
empresas que distribuem o SGBD. Esse
arquivo
tem
o
objetivo
ajudar
no
carregamento do driver JDBC. Na prtica de
um desenvolvimento voltado a web, criada a
pasta lib da pasta WEB-INF e inserido esse
arquivo.

Sobre a classe, o seguinte:


A classe um Singleton, o que significa que
teremos apenas uma instncia nica da
mesma em toda a aplicao. Portanto, o
mtodo "getInstance()" serve para criar
uma nova instncia dessa classe e retornar
essa instncia.
Obs: Instncia = novo objeto
J o mtodo getConnection() serve para
criar um novo objeto Connection do JDBC e
retorn-lo. Por isso a necessidade de
chamar sempre os dois

interface Connection
Representa uma conexo ao banco de dados. Nessa interface
so apresentados os mtodos mais utilizados.
Mtodo close
Geralmente inserido dentro do bloco finally para realizar
sempre a sua execuo, pois esse mtodo serve para fechar e
liberar imediatamente um objeto Connection.
Mtodo isClosed
Serve para verificar se o objeto Connection est fechado.
Mtodo createStatement
usado para criar um objetoStatementque executa
instrues SQL ao banco de dados.
Mtodo prepareStatement
usado para criar um objeto que representa a instruo SQL
que ser executada, sendo que invocado atravs do objeto
Connetion.

setAutoCommit
Esse mtodo aceita como parmetro um valor booleano (true ou
false), no qual consegue definir se todas as instrues
executadas sero gravadas (comitadas). Por padro, quando
finalizada uma instruo de INSERT, UPDATE ou DELETE a
operao de gravao (commit) executada automaticamente
sem a necessidade de invocar o mtodo setAutoCommit. Agora,
para instrues de SELECT, a gravao dos dados ocorre quando
o conjunto de dados associados fechado, ou seja, quando
invocado o mtodo close.
rollback
Usado para retornar uma transao, sendo muito usado dentro
de blocos catch em caso de alguma operao gerar erro.
A interface Statement
Nesta interface so listados os mtodos executeQuery e
executeUpdate que so considerados os mais importantes
referente a execuo de uma query.
executeQuery- Executa uma instruoSQLque retorna um
nico objeto ResultSet.

Acesso a dados com JDBC

Acesso a dados com JDBC

Sem dvida alguma o acesso a dados um dos recursos mais


utilizados na rea de desenvolvimento. Praticamente todo o
sistema precisa de um banco de dados, havendo raras excees.

O Java, diferente de linguagens como PHP, no suporta o acesso a


banco de dados diretamente, para isso ele usa uma API (conjunto
de classes e interfaces) para fazer o servio.A JDBC (Java Database
Connectivity), faz o envio de instrues SQL para qualquer banco
de dados relacional, desde que haja um driver que corresponda ao
mesmo presente.

Figura 1:Esquema de funcionamento do JDBC

Pacote Java.sql

Acesso a dados com JDBC

Existem quatro tipos de drivers JDBC: 1, 2, 3 e 4, so eles:

Tipo 1: Ponte JDBC-ODBC


o tipo mais simples, mas restrito plataforma Windows. Utiliza ODBC para conectar-se com o
banco de dados, convertendo mtodos JDBC em chamadas s funes do ODBC. Esta ponte
normalmente usada quando no h um driver puro-Java (tipo 4) para determinado banco de
dados, pois seu uso desencorajado devido dependncia de plataforma.
Tipo 2: Driver API-Nativo
O driver API-Nativo traduz as chamadas JDBC para as chamadas da API cliente do banco de dados
usado. Como a Ponte JDBC-ODBC, pode precisar de software extra instalado na mquina cliente.
Tipo 3: Driver de Protocolo de Rede
Traduz a chamada JDBC para um protocolo de rede independente do banco de dados utilizado,
que traduzido para o protocolo do banco de dados por um servidor. Por utilizar um protocolo
independente, pode conectar as aplicaes clientes Java a vrios bancos de dados diferentes. o
modelo mais flexvel.
Tipo 4: Driver nativo
Converte as chamadas JDBC diretamente no protocolo do banco de dados. Implementado em
Java, normalmente independente de plataforma e escrito pelos prprios desenvolvedores. o
tipo mais recomendado para ser usado.
Outra das vantagens da JDBC o fato dela funcionar como uma camada de abstrao de dados.
Independente do SGBD utilizado, a API ser a mesma, facilitando muito a vida dos programadores
caso haja a necessidade de uma migrao de banco.

Acesso a dados com JDBC

Vamos entender melhor agora o que cada comando quer dizer.


Class.forName - Esse sem dvida o comando principal.
atravs dele que estamos chamando o driver JDBC.

Connection- Aqui estamos criando um objeto do tipo


"Connection". nele que ficam armazenadas as informaes da
sua conexo com o banco. Para ser mais direto, usamos o
mtodo "getConnection" do objeto "DriverManager" contido no
"java.sql" ao invs do construtor padro, isso faz com que a
conexo seja estabelecida imediatamente. Repare na string
passada como parmetro, nela esto contidas as informaes
da nossa conexo, so elas respectivamente: driver JDBC, host,
caminho do banco, usurio e por ultimo a senha.

Statement- uma declarao simples, porm vital para


qualquer projeto. O objeto "Statement" o responsvel por
receber os comandos SQL e fazer o envio das informaes,

Logo...

O processo de armazenamento de dados


tambm chamado de persistncia.
A biblioteca de persistncia em banco de
dados relacionais do Java chamada JDBC, e
tambm existem diversas ferramentas do tipo
ORM (Object Relational Mapping) que facilitam
bastante o uso do JDBC.

CONFIGURANDO JDBC

https://evandrocgoncalves.wordpress.com/201
3/04/01/jdbc-configurando-banco-de-dadosno-netbeans/

Exerccios - I

Com base no estrutura de banco de dados abaixo .

DISCIPLINA
CURSO

ID
DESCRIO

Devemos desenvolver :
a)

Linguagem DDL e DML para a criao da base de dados.

b)

Desenvolver a conexo JDBC

c)

Configurar drive .jar

d)

Inserir a disciplina persistncia Java com o Id 5

e)

Realizar o teste na base de dados .

https://evandrocgoncalves.wordpress.com/2013/04/01/jdbcconfigurando-banco-de-dados-no-netbeans/

Correo - Exerccios - I

Create database Curso;

Use curso;

create table disciplia (ID integer NOT NULL, DESCRICAO


varchar(255) NOT NULL, PRIMARY KEY (ID));

insert into disciplina values (1,'Paradigmas de Programacao');

insert into disciplina values (2,'Sistemas Operacionais');

insert into disciplina values (3,'Redes de Computadores');

insert into disciplina values (4,'Sistemas Distribuidos');

Preste muita ateno quando for fazer a importao as classes,


todas elas so do pacotejava.sql. Essa classe possui a varivel
estticaURL, que por onde passamos aodriverJDBC como
iremos fazer a conexo com o banco, essa a string de
conexo que comentei anteriormente. Note que nessa string,
no temos porta, nem o IP da mquina, isso acontece por que
iremos acessar um banco de dadosstandalone.
A varivelDRIVER, indica qual classe nodriverJDBC iremos
utilizar, isso significa o tipo de conexo que ser criada, no
casoEmbedded, ou seja, do tipostandalone.
O mtodogetConnection()ir retornar quando for necessrio,
uma conexo com o banco de dados. Mas o que acontece
realmente aqui? Quando passamos para o mtodo
estticoClass.forName()a classe doDriverJDBC, ela ir registrar
essa classe como umdriverJDBC, pela
classejava.sql.DriverManagere pelo mtodoregisterDriver,
assim oDriverj est registrado e ento podemos abrir uma
conexo com o banco de dados atravs da string de conexo.
Agora oDriverManagervai perguntar para
cadaDriverregistrado, se ele aceita a string de conexo

Interface Result Set

A interface ResultSet permite colher os resultados da execuo de


nossa query no banco de dados. Esta interface apresenta uma srie
de mtodos para prover o acesso aos dados

Interface Result Set


//DefinidooStatement,executamosaquerynobancodedados
ResultSetrs=stm.executeQuery(SQL);

//Omtodonext()informasehouveresultadoseposicionaocursordo
banco
//naprximalinhadisponvelpararecuperao
//Comoesperamosvriaslinhasutilizamosumlaopararecuperaros
dados
while(rs.next())
{
//OsmtodosgetXXXrecuperamosdadosdeacordocomotipoSQL
dodado:
Stringtit=rs.getString("titulo");
Stringaut=rs.getString("autor");
inttotalFaixas=rs.getInt("total_faixas");

//Asvariveistit,autetotalFaixascontmosvaloresretornados
//pelaquery.Vamosimprim-los

System.out.println("Titulo:"+tit+"Autor:"+aut+"Tot.Faixas:"+total

Interface Result Set


Exemplo - BD
CREATE DATABASE javadiscos;
USE javadiscos;
CREATE TABLE artista(id SMALLINT NOT NULL,
nome VARCHAR(20) NOT NULL,
banda VARCHAR(20) NOT NULL,
pais VARCHAR(20) NOT NULL,
PRIMARY KEY (ID));
INSERT INTO artista VALUES (123,'Axl Rose','GunsNRoses', 'EUA');
INSERT INTO artista VALUES (654,'Paul McCartney ','The Beatles',
'Reino Unido');
INSERT INTO artista VALUES (789,'Eddie Vedder','Pearl Jam', 'EUA');
SELECT * FROM artista;

DB

Interface Result Set


Exemplo 2 - BD
CREATE DATABASE escola;
USE escola;
CREATE TABLE aluno(matricula SMALLINT NOT NULL,
nome VARCHAR(15) NOT NULL,
media NUMERIC(15,2) NOT NULL,
PRIMARY KEY (matricula));
INSERT
INSERT
INSERT
INSERT

INTO
INTO
INTO
INTO

aluno
aluno
aluno
aluno

VALUES
VALUES
VALUES
VALUES

SELECT * FROM aluno;

(2234,'Patrick','9.5');
(3345,'Jose','7.5');
(4456,'Pilar','10.0');
(5567,'Evita','5.5');
DB

Exerccios II Interfaces

Criar uma conexo JDBC para a seguinte


estrutura de dados.

Base de Dados : Cadastro


Tabela: Pessoa
Onde Nome , Idade e Sexo.

REVISO

DAO DATA ACCESS OBJECT


PadresdeProjetodeSoftwareOrientadoa Objetos
A idia de padres foi apresentada por Christopher Alexander em
1977 no contexto de Arquitetura(deprdiosecidades).
Cada padro descreve um problema que ocorre repetidamente,
de novo e de novo, em nosso ambiente, e ento descreve a parte
central da soluo para aquele problema de uma forma que voc
pode usar esta soluo um milho de vezes, sem nunca
implementla duas vezes da mesmaforma.
Um padro de projeto uma soluo geral para um problema
recorrente no desenvolvimento de softwareorientadoaobjetos.
Um padro de projeto uma espcie de gabarito para como
resolver
um
problema,
ou
melhor
dizendo,umasoluoelegantenaresoluodeproblemas.

DAO DATA ACCESS OBJECT


Objeto de acesso a dados(ou simplesmenteDAO, acrnimo
deData Access Object), umpadroparapersistncia de
dadosque permite separar regras de negcio das regras de
acesso a banco de dados. Numa aplicao que utilize a
arquiteturaMVC um padro de arquitetura de software (design
pattern) que separa a representao da informao da interao
do usurio com ele),
todas as funcionalidades de bancos de
dados, tais como obter as conexes, mapear objetosJavapara
tipos de dadosSQLou executar comandos SQL, devem ser feitas
por classes DAO.

DAO Vantagens
A vantagem de usar objetos de acesso a dados a separao
simples e rigorosa entre duas partes importantes de uma
aplicao que no devem e no podem conhecer quase que nada
uma da outra, e que podem evoluir frequentemente e
independentemente. Alterar a lgica de negcio podem esperar
apenas a implementao de uma interface, enquanto que
modificaes na lgica de persistncia no alteram a lgica de
negocio, desde que a interface entre elas no seja modificada.

DAO Vantagens
No contexto especfico da linguagem de programao Java, um
objeto de acesso a dados como padro de projeto de software
pode ser implementado de vrias maneiras.
Pode variar desde uma simples interface que separa partes de
acesso a dados da lgica de negcio de uma aplicao at
frameworks e produtos comerciais especficos.
Os paradigmas para programao usando DAOs demandam
alguma proficincia.
O uso de tecnologias como Java persistence technologies e JDO
garantem a implementao do padro de projeto at certo ponto.
Tecnologias como Enterprise JavaBeans trazem para a aplicao
servidores montados e que podem ser usados em aplicaes que
usem um servidor de aplicao JEE.

UseoPadroDataAccessObjectQuando:
O principal objetivo de um DAO encapsular o acesso e a
manipulao de dados em uma camadaseparada;
Voc deseja implementar os mecanismos de acesso a dados para
acessar e manipular dados em umarmazenamentopersistente;
Voc deseja desacoplar a implementao do armazenamento
persistente do restante da aplicao;
Voc deseja fornecer uma API de acesso uniforme aos dados para
um mecanismo persistente para vrios tipos de fontes de dados,
como repositrios RDBMS, LDAP, OODB, XML,
arquivossimpleseassimpordiante;
Voc deseja organizar os recursos de lgica de acesso a dados e
encapsular recursos
proprietriosparafacilitaracapacidadedemanutenoeaporta
bilidade

AEstruturaDoDataAccessObject(DAO)

OsParticipantesDoDataAccessObject(DAO)
Cliente o cliente um objeto que requer acesso fonte de
dados para obter e armazenar dados.
DAO o DAO o objeto de funo principal desse padro. Ele
abstrai a implementao de acesso a dados subjacente para o
cliente a fim de permitir um acesso transparente a fonte de
dados.
BaseDeDadorepresentaumaimplementaodefontededado
s.
ResultSetrepresentaosresultadosdeumaexecuodeconsult
a.

Demonstrao DAO Arquivos:


DAO.java,
Pais.java,
PaisDAO.java,
BaseDeDados.java,
TestaSelectPaisDAO.java,
TestaInsertPaisDAO.java,
TestaUpdatePaisDAO.java,
TestaDeletePaisDAO.java,
Participante.java,
ParticipanteDAO.java,
TestaSelectParticipanteDAO.java,
TestaInsertParticipanteDAO, T
estaUpdateParticipanteDAO.java,
TestaDeleteParticipanteDAO.java,
DAOException.java

Usando DAO
Criar uma database com o nome "javafx_crud.
create database javafx_crud;
use javafx_crud;
create table pessoa(
rg varchar(20) not null,
nome varchar(20) not null,
idade int(2) not null,
cidade varchar(20) not null,
estado varchar(2) not null,
primary key(rg)
);

O comum em Java criarmos classes Pojo, classes


que so semelhantes a tabelas do banco, assim
podemos manipular de forma igual para igual ao
que est no banco.
POJO = Plain Old Java Object (Velho e Simples
Objecto Java)
um referencia a objectos que no dependem da
herana de interfaces ou classes de frameworks
externos.

Estrutura

http://javafree.uol.com.br/artigo/874102/Aplicativo-Java-com-acesso-a-banco-de-dados-1%C2%BA-parte-Dao.html

Nada demais neste teste, estamos inserindo uma pessoa, depois buscando para
ver se ela foi inserida mesmo! Em seguida atualizamos o nome e buscamos para
ver se aconteceu a atualizao, por fim apagamos a pessoa e tentamos realizar a
busca para ter certeza que nosso dado foi apagado mesmo!
Ao rodar essa classe voc deve obter o seguinte resultado no console:

ar

S-ar putea să vă placă și