6 - Integração Com Banco de Dados em Java
6 - Integração Com Banco de Dados em Java
banco de dados
em Java
Prof. Tomás de Aquino
Apresentação
Propósito
Preparação
Objetivos
Módulo 1
Módulo 2
Módulo 3
meeting_room
Introdução
Neste conteúdo, analisaremos as ferramentas para acesso a
banco de dados com uso das tecnologias JDBC e JPA,
pertencentes ao ambiente Java, incluindo exemplos de código
para efetuar consulta e manipulação de registros.
Após compreender os princípios funcionais dessas tecnologias,
construiremos um sistema cadastral simples e veremos como
aproveitar os recursos de automatização do NetBeans para
construção de componentes JPA.
Download material
1 - Recursos para acessar o banco de dados
Ao final deste módulo, você será capaz de descrever os recursos para acesso a
banco de dados no ambiente Java.
Conceitos básicos
As aplicações de back-end são programas de software que lidam com
tarefas de processamento de dados, lógica de negócios e
gerenciamento de recursos. O middleware permite a comunicação entre
as aplicações front-end e back-end para que a aplicação distribuída
funcione sem problemas.
Veja neste vídeo os conceitos básicos relacionados com front-end e
back-end, middleware e banco de dados Derby.
Front-end e back-end
Quando falamos de front-end, estamos nos referindo à camada de
software responsável pelo interfaceamento do sistema, com o uso de
uma linguagem de programação. Aqui, utilizaremos os aplicativos Java
como opção de front-end.
MQ Series
JBossMQ
ActiveMQ
Microsoft MQ
Middleware
Com diferentes componentes para acesso e modelos de programação
heterogêneos, a probabilidade de ocorrência de erros é simplesmente
enorme, levando à necessidade de uma camada de software
intermediária, responsável por promover a comunicação entre o front-
end e o back-end.
Atenção!
Tamanho: 10 e Chave
MATRÍCULA VARCHAR
primária
Sem atributos
ENTRADA INTEGER
complementares
Atividade 1
É um bom momento para retornarmos à questão do middleware. Analise
as seguintes afirmações e responda qual alternativa está correta.
Componentes do JDBC
Existem quatro tipos de drivers JDBC, apresentados a seguir.
JDBC-Net expand_more
JAVA
content_copy
Atenção!
JAVA
content_copy
Após a recepção da consulta no objeto de nome r1, podemos nos
movimentar pelos registros, com o uso de next, e acessar cada campo
pelo nome, para a obtenção do valor, sempre utilizando o método
correto para o tipo do campo, como getString, para texto, e getInt, para
valores numéricos inteiros.
JAVA
content_copy
Atenção!
Cada parâmetro deve ser preenchido com a chamada ao método
correto, de acordo com seu tipo, como setInt, para inteiro, e setString,
para texto. Após o preenchimento, devemos executar o comando SQL,
com a chamada para executeUpdate, no caso das instruções INSERT,
UPDATE e DELETE, ou executeQuery, para a instrução SELECT.
Atividade 2
Associe corretamente:
1. JDBC-ODBC Bridge
2. JDBC-Native API
3. JDBC-Net
4. Pure Java
B 2, 1, 3, 4.
C 1, 4, 2, 3.
D 1, 4, 2, 3.
E 2, 1, 4, 3.
Aprenda neste vídeo a criar o banco de dados Java DB, criar a tabela e
incluir um aluno na base de dados.
Roteiro de prática
Nesta prática, utilizaremos como ponto de partida os códigos vistos nas
seções “Banco de Dados Derby” e “Utilização das funcionalidades
básicas do JDBC”. Você deverá implementar os passos a seguir:
Atividade 3
Analise as afirmativas a seguir.
A II e III, apenas.
B II e IV, apenas.
E I e IV, apenas.
Mapeamento objeto-relacional
Torna-se necessário efetuar uma conversão entre os dois modelos de
representação, o que é feito com a criação de uma classe de entidade
para expressar cada tabela do banco de dados, à exceção das tabelas
de relacionamento. Segundo a conversão efetuada, os atributos da
classe serão associados aos campos da tabela, e cada registro poderá
ser representado por uma instância da classe.
JAVA
content_copy
JAVA
content_copy
JAVA
content_copy
JAVA
content_copy
B createStatement e executeQuery.
C executeQuery e close.
D executeQuery e add.
E getConnection e add.
JAVA
content_copy
Iniciamos criando os métodos getStatement e closeStatement, com o
objetivo de gerar executores de SQL e eliminá-los, efetuando também as
conexões e desconexões nos momentos necessários. Outro método
utilitário é o getConnection, utilizado apenas para encapsular o processo
de conexão com o banco.
Comentário
JAVA
content_copy
Classe AlunoDAO
Com a classe de base definida, podemos implementar a classe
AlunoDAO, concentrando as operações efetuadas sobre nossa tabela, a
partir da entidade Aluno e da chave primária do tipo String. Veja o início
de sua codificação.
JAVA
content_copy
Atenção!
JAVA
content_copy
Todos os métodos para manipulação de dados utilizam
PreparedStatement, obtido a partir de getConnection, com o
fornecimento da instrução SQL parametrizada. As linhas seguintes
sempre envolvem o preenchimento de parâmetros e chamada para o
método executeUpdate, em que o comando SQL resultante, após a
substituição das interrogações pelos valores, é efetivamente executado
no banco de dados.
JAVA
content_copy
Atividade 2
O uso de comandos SQL dispersos, em meio ao código do aplicativo,
diminui o reuso e aumenta a dificuldade de manutenção. Com base no
padrão de desenvolvimento DAO, temos a concentração dos comandos
SQL em uma única classe, em que existem métodos para o retorno de
entidades, como obterTodos, que estão relacionados ao comando
A INSERT.
B CREATE.
C DELETE.
D SELECT.
E UPDATE
Framework JPA
Atualmente, no ambiente Java, concentramos os frameworks de
persistência sob uma arquitetura própria, conhecida como Java
Persistence Architecture (JPA).
JAVA
content_copy
As anotações utilizadas são bastante intuitivas, como Entity
transformando a classe em uma entidade, Table selecionando a tabela
na qual os dados serão escritos, e Column associando o atributo a um
campo da tabela. As características específicas dos campos podem ser
mapeadas por meio de anotações como Id, que determina a chave
primária, e Basic, na qual o parâmetro optional permite definir a
obrigatoriedade ou não do campo.
JAVA
content_copy
Analisando o arquivo persistence do exemplo, temos uma unidade de
persistência com o nome ExemploJavaDB01PU, sendo a conexão com o
banco de dados definida por meio das propriedades url, user, driver e
password, com valores equivalentes aos que são adotados na utilização
padrão do JDBC. Também temos a escolha das entidades que serão
incluídas no esquema de persistência, no caso apenas Aluno, e do
provedor de persistência, em que foi escolhido Eclipse Link, mas que
poderia ser trocado por Hibernate ou Oracle Top Link, entre outras
opções.
Aplicação de JPA
Com os elementos do projeto devidamente configurados, poderíamos
utilizá-los para listar o nome dos alunos, por meio do fragmento de
código apresentado a seguir:
JAVA
content_copy
Atividade 3
A adoção do padrão DAO abriu caminho para a construção de diversos
frameworks de persistência, que simplificam muito as operações sobre
a base de dados, eliminando a necessidade de utilização de comandos
SQL. Entre as diversas opções do mercado, temos uma arquitetura de
persistência denominada JPA, em que as entidades devem ser
gerenciadas por uma classe do tipo
A EntityManager.
B Query.
C Transaction.
D Persistence.
E Factory.
Roteiro de prática
Nesta prática, utilizaremos como ponto de partida os códigos vistos nos
tópicos “Orientação a objetos e o modelo relacional”, “O padrão DAO” e
“Java Persistence Architecture (JPA)”. Você deverá implementar os
passos a seguir:
Atividade 4
Analise o trecho de código e as afirmativas que seguem.
JAVA
content_copy
A II e III, apenas.
B II e IV, apenas.
C I, II e IV, apenas.
E I e IV, apenas.
As boas práticas indicam que se deve criar uma classe DAO para
cada entidade relevante. O objetivo é concentrar as instruções SQL
em um único tipo de classe, viabilizando a mudança de fornecedor
de banco de dados de forma simples, já que o processo de conexão
pode ser encontrado em apenas um método, reutilizado por todo o
restante do código.
Classe SistemaEscola
Vamos criar uma classe com o nome SistemaEscola. Observe a seguir
sua codificação inicial, incluindo a definição da instância de AlunoDAO e
os métodos para exibição de valores, tanto para um aluno quanto para o
conjunto completo deles.
JAVA
content_copy
Note como o método exibirTodos utiliza notação lambda para percorrer
toda a coleção de alunos, com chamadas sucessivas para o método
exibir, o qual recebe uma instância de Aluno e imprime seus dados no
console.
JAVA
content_copy
No método inserirAluno, instanciamos um objeto Aluno e preenchemos
seus atributos com os valores informados pelo usuário, sendo a
inclusão na base efetivada ao final, enquanto excluirAluno solicita a
matrícula e efetua a chamada ao método excluir, para que ocorra a
remoção na base de dados.
Gerenciamento de transações
O controle transacional é uma funcionalidade que permite o isolamento
de um conjunto de operações, garantindo a consistência na execução
do processo completo. De modo geral, uma transação é iniciada, as
operações são executadas, e temos ao final uma confirmação do bloco,
com o uso de commit, ou a reversão das operações, com rollback.
Comentário
JAVA
content_copy
JAVA
content_copy
Como já era esperado, o uso de JPA permite um código muito mais
simples, embora os princípios relacionados ao controle transacional
sejam similares. O controle deve ser obtido com getTransaction, a partir
do qual uma transação é iniciada com begin, sendo confirmada com o
uso de commit, ou cancelada com rollback.
Atividade 1
Por meio do controle transacional, é possível gerenciar blocos de
operações como uma ação única, que pode ser desfeita pelo banco de
dados sem maiores esforços em termos de programação. Em termos de
JDBC padrão, qual classe é responsável pela transação?
A Transaction
B Connection
C EntityManager
D ResultSet
E Rollback
Implementação do sistema
cadastral simples
Na aprendizagem de qualquer linguagem de programação, os exercícios
práticos são fundamentais para a fixação do conteúdo e o entendimento
de particularidades, sintaxes e demais recursos.
Executar o sistema.
Executar o sistema.
Atividade 2
Analise o trecho de código e as afirmativas que seguem.
JAVA
content_copy
I. O método exibirTodos utiliza notação lambda para percorrer toda a
coleção de alunos.
II. O sistema escola não apresenta uma instância de classe DAO.
III. Temos uma instância estática de BufferedReader encapsulando o
teclado, com o nome entrada.
A I e III, apenas.
B I e II, apenas.
C II e III, apenas.
D II, apenas.
E III, apenas.
Passo 1 expand_more
Acionar o menu New File, escolhendo a opção Entity Classes
from Database.
Passo 2 expand_more
Passo 3 expand_more
Adicionar as tabelas de interesse, no caso seria Aluno.
Passo 4 expand_more
Passo 1 expand_more
Passo 2 expand_more
Seleção de entidades.
Passo 3 expand_more
JAVA
content_copy
JAVA
content_copy
As modificações que devem ser efetuadas incluem a utilização de
AlunoJpaController, inicializado a partir da unidade de persistência
ExemploEntidadeJPAPU, no lugar de AlunoDAO, além de getters e
setters no acesso aos atributos de Aluno.
Roteiro de prática
Nesta prática, utilizaremos como ponto de partida os códigos vistos no
tópico “Sistema com JPA no NetBeans”. Você deverá implementar os
passos a seguir:
Criar o projeto ExemploEntidadeJPA.
Executar o projeto.
Atividade 4
Analise o trecho de código e as afirmativas a seguir em relação ao JPA.
JAVA
content_copy
B II e IV, apenas.
C I, II e IV, apenas.
D I, III e IV apenas.
E I e IV, apenas.
Explore +
Para saber mais sobre os assuntos tratados neste conteúdo, veja as
nossas recomendações!
Referências
CORNELL, G.; HORSTMANN, C. Core Java. São Paulo: Pearson, 2010.
DEITEL, P.; DEITEL, H. Java, Como Programar. São Paulo: Pearson, 2010.
Download material
Relatar problema