Buscar

13 - Banco de Dados III - dao

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Linguagem de 
Programação
Banco de Dados – III 
(acesso DAO e classes API JDBC)
Consulta a Dados
Data Access Object - DAO
• Esse padrão provê o acesso ao banco de dados
para os operações de atualização e consulta.
• Os detalhes relacionados ao armazenamento e
consulta de dados são encapsulados.
• É uma camada (classe) intermediária entre a• É uma camada (classe) intermediária entre a
aplicação (interface) e o banco de dados.
• O principal papel é mapear os objetos para os
registros (linhas) do banco de dados e vice-versa.
Data Access Object - DAO
• Numa aplicação baseada em Orientação a Objetos, que tem
como princípio trabalhar com objetos, estes são manuseados
por essa camada.
• Quando os dados de um Aluno for armazenado na tabela de
um banco de dados, um objeto da classe Aluno deverá ser
enviado ao DAO.
public void incluirAluno(Aluno objAluno)public void incluirAluno(Aluno objAluno)
• Quando os dados de um Aluno for consultado, o DAO deverá
retornar uma instância (objeto) da classe Aluno.
public Aluno consultarAluno(long matr)
Exemplo de Implementação - AlunoDAO
• Dada uma classe de entidade Aluno teremos uma classe
AlunoDAO. As assinaturas dos métodos são dadas abaixo
public class AlunoDAO {
//método para incluir um aluno na base de dados
public void incluirAluno(Aluno objAl) throws Exception {
}
//método onsultar aluno da matricula fornecida no parametro matrAluno
public Aluno consultarAluno(long matrAluno)throws Exception {
}
//método para alterar os dados de um aluno
public void alterarAluno(Aluno objAl) throws Exception {
}
//método para excluir dados de um aluno, para uma dada matricula
public void excluirAluno (long matrAluno) throws Exception {
}
}
Exemplo de Implementação - AlunoDAO
• Nos itens a seguir será apresentada a estrutura de
implementação de cada método da classe
AlunoDAO.
• Está incluída também as explicações de
funcionamento das implementações das classes da
API JDBC, que são utilizadas nos métodos.
• As classes da API JDBC são: Connection,• As classes da API JDBC são: Connection,
PreparedStatement, ResultSet.
• Com relação às cláusulas (palavras reservadas):
throws, try, catch, throw – ver módulo de
tratamento de exceções. A seguir apresentamos
uma síntese.
AlunoDAO – tratamento de exceções
public Aluno consultarAluno(long matrAluno)throws Exception {
try {
//comandos a executar
} catch (Exception e){
//ocorreu algum erro em algum comando do bloco try 
//tratar ou re-lançar o erro para o chamador deste método
throw new Exception ("DAO-consultar:"+e.getMessage());
}}
}
• throws – indica que o método pode lançar uma exceção.
• throw – lança uma exceção. No exemplo, a classe DAO
por ser uma classe de camada intermediária, não cabe a
esta apresentar mensagem de erro ao usuário. Isso cabe
à classe de interface. Assim, o erro que ocorre é lançado
novamente para ser processado por quem chama este
método.
AlunoDAO – consulta SQL
• Um comando de consulta SQL para uma matricula
específica é dado na forma abaixo.
SELECT * FROM TBAlunos WHERE matricula = 2010234
• Dentro do programa o comando SQL não poderá ter um
número de matricula constante. Precisará ser uma
variável para que várias matrículas possam servariável para que várias matrículas possam ser
consultadas. O comando fica na forma abaixo.
SELECT * FROM TBAlunos WHERE matricula = ?
• No formato acima o ? é uma variável que em tempo de
execução será substituida por valor específico para a
matricula a ser consultado.
• Cada variável recebe um número a partir de 1, da
esquerda para a direita.
Classes JDBC envolvidas
Connection
• Connection – esta classe é responsável em
estabelecer e manter uma conexão com o banco
de dados.
• No projeto de implementação a instanciação do
objeto da classe Connection é realizada pelaobjeto da classe Connection é realizada pela
classe FabricaConexao.
• O uso da classe FabricaConexao foi dado em
módulo anterior.
Classes JDBC envolvidas
PreparedStatement
• PreparedStatement (PS) – esta classe é responsável em
preparar um comando SQL a ser enviado ao banco de
dados/tabela.
• Um comando SQL com variável precisa ser preparado,
ou seja, complementado de forma que possa ser enviado
ao BD.
• Para instanciar um objeto da classe PreparedStatement
utilizaremos um objeto da classe Connection.
• O método prepareStatement é chamado a partir do
objeto da classe Connection para criar o objeto de PS.
• O método prepareStatement recebe como parâmetro a
String contendo o comando SQL e retorna um objeto da
classe PreparedStatement. Veja slide seguinte.
AlunoDAO – consulta SQL
• Instanciação do objeto da classe PreparedStatement.
public Aluno consultarAluno(long matrAluno)throws Exception {
try {
String consulta = “SELECT * FROM TBAlunos WHERE matricula = ?”;
Connection conexao = FabricaConexao.abreConexaoBD();
PreparedStatement comando = conexao.prepareStatement(consulta);
...
} catch (Exception e){
trow new Exception ("DAO-consultar:"+e.getMessage());
}
}
Classes JDBC envolvidas
PreparedStatement
• Preparar o comando SQL consiste em substituir a variável
do comando SQL por um valor específico.
• A substituição das variáveis por valores é realizada por
meio de métodos específicos de acordo com o tipo de dado
da variável a ser substituída.
• Métodos:
– setString – para atribuir uma valor para uma variável de– setString – para atribuir uma valor para uma variável de
tipo string.
– setInt – para tipo int.
– setLong – para tipo long.
– setDate – para um tipo da classe Date.
– Outros;
• Exemplo:
comando.setLong(1, matrAluno);
Classes JDBC envolvidas
PreparedStatement
• A classe PS disponibiliza o método executeQuery() para
o envio do comando SQL de consulta para execução no
servidor de banco de dados.
• A execução do método retorna um objeto que terá o
resultado da consulta feita ao banco de dados.resultado da consulta feita ao banco de dados.
• O objeto retornado é da classe ResultSet. A estrutura de
código é dada no slide seguinte.
AlunoDAO – consulta SQL
• Preparação e execução do comando SELECT.
public Aluno consultarAluno(long matrAluno)throws Exception {
try {
String consulta = “SELECT * FROM TBAlunos WHERE matricula = ?”;
Connection conexao = FabricaConexao.abreConexaoBD();
PreparedStatement comando = conexao.prepareStatement(consulta);
comando.setLong(1, matrAluno);
ResultSet retorno = comando.executeQuery();
...
} catch (Exception e){
trow new Exception ("DAO-consultar:"+e.getMessage());
}
}
Classes JDBC envolvidas
ResultSet
• Representa o resultado de consulta (cursor)
• Permite percorrer o cursor (unidirecional e
seqüencial)
• Possibilita obter o valor das colunas, retornadas na
consulta
• Possibilita obter informações da tabela/visão em
tempo de execução (nome, tipo e propriedades das
colunas, nome da tabela, etc.)
Classes JDBC envolvidas
ResultSet
• verificar se existem mais registros para serem lidos,
com o método next()
• Dado um objeto (obj) da classe ResultSet, chamar o
método next() significa obter a próxima linha de
dados retornados na consulta.
boolean obj.next();boolean obj.next();
• No exemplo, o método irá retornar true se houver
dados a processar, false se não houver mais dados
• pode-se consultar os campos através de métodos
específicos, que mapeam o tipo SQL para o tipo
Java. Por exemplo, getString(campo) obtém um
campo do tipo string.
Classes JDBC envolvidas
ResultSet
matricula nome email
200010 Beth Cruz bc@com
200120 José Manoel jm@com
200330 Eliz San es@com
• Dada a tabela abaixo - TBAlunos
• Admitindo que a consulta abaixo foi preparada e
executada, obtendo-se um objeto da classe ResultSet.
SELECT * FROM TBAlunos WHERE matricula = 200120
• Assumimosque o objeto criado seja o seguinte:
ResultSet retorno = comando.executeQuery();
• A consulta retornada será uma tabela com a estrutura
abaixo. Observe o cursor retorno, apontando para o inicio
da tabela.
Classes JDBC envolvidas
ResultSet
matricula nome email
200120 José Manoel jm@com
retorno
• Uma chamada de execução ao método next(), ocasionará
um deslocamento no cursor para o primeiro conjunto dos
dados retornados.
retorno.next(); (irá retornar true)
matricula nome email
200120 José Manoel jm@com
retorno
Classes JDBC envolvidas
ResultSet
• Uma outra chamada de execução ao método next(),
ocasionará um deslocamento no cursor para posição
após dados.
retorno.next(); (irá retornar false)
matricula nome email
200120 José Manoel jm@comretorno
Final da consulta
• Para obter os dados obtidos na consulta para uso dentro
do programa, a classe ResultSet disponibiliza alguns
métodos:
– getString – para obter um dado de uma coluna do tipo string
– getInt – para obter um dado de uma coluna do tipo int
– getLong – para obter um dado do tipo long
Classes JDBC envolvidas
ResultSet
– getLong – para obter um dado do tipo long
• Os dados podem ser obtidos de acordo com o número da
coluna, iniciando em 1, ou por meio do nome da coluna.
matricula nome email
200120 José Manoel jm@com
nome da coluna
número da coluna
conteúdo da coluna
321
Classes JDBC envolvidas
ResultSet
• Com o objeto retorno a obtenção dos dados da consulta
para variáveis (objetos) dentro do programa se dá nas
formas abaixo.
• Os dados obtidos são aqueles para onde o cursor está
apontando.
long numMatr = retorno.getLong(1);
String strNome = retorno.getString(“nome”);
String strEmail = retorno.getString(3);
matricula nome email
200120 José Manoel jm@comretorno

Outros materiais