Title: Linguagens de Programa
1- Linguagens de Programação Orientadas a Objetos
- Pós-Gradução(Lato-Sensu) em Sistemas de Banco de
Dados - UFPa - Marco Fagundes
- mafm_at_cin.ufpe.br
- Aula 31 a 35 - Conectividade com Banco de Dados
(JDBC) - http//www.ufpa.br/sampaio/bd2003/lpoo
- Elaborado com base no material cedido pelo prof.
Admilson Ribeiro
? Marco Fagundes
2Acessando BD com JDBC
- O JDBC - Java Database Connectivity
- É uma API para acesso a SGBDs em Java
- JDBC não leva em consideração características
intrínsecas sobre uma fonte de dados específica
ou sobre o esquema de armazenamento de dados - Através de JDBC pode-se enviar comandos SQL para
o BD e processar os resultados
3Funcionamento do JDBC
- Deve-se ter um driver JDBC instalado e o ambiente
de execução configurado - Na aplicação o driver JDBC é carregado e
registrado para uso - Em seguida uma conexão com o banco de dados é
criada - Faz a instanciação de um objeto do tipo
Statement - Submete-se as instruções SQL para o SGBD por meio
do objeto instanciado - A partir deste ponto os resultados podem ser
acessados - Finalmente deve-se fechar a conexão
4Estrutura do JDBC
Aplicativo Java
API JDBC
Gerenciador de driver JDBC
...
Ponte JDBC-ODBC
Driver A
ODBC e BD Drivers
Drivers JDBC
Protocolo de Acesso Proprietários dos BDs
5Funcionamento do JDBC
- As classes JDBC estão no pacote java.sql
- Os programas em Java usam objetos e métodos deste
pacote para ler e escrever de uma fonte de dados. - Um programa que usa JDBC necessitará de um driver
para a fonte de dados. - JDBCODBC.DLL para o windows.
6Tipos Importantes
- Interfaces
- Driver
- Connection
- Statement
- PreparedStatement (sql com parametros)
- CallableStatement (stored procedure)
- ResultSet
- Classes
- DriverManager
- Date
- Time
7Acessando BD ODBC com a ponte JDBC-ODBC
- A ponte JDBC-ODBC é implementada como
JdbcOdbc.class e uma biblioteca nativa para
acessar o driver ODBC(JDBCODBC.DLL) - A vantagem desta ponte é que o JDBC pode acessar
quase todos os bancos de dados - Os drivers ODBC estão amplamente disponíveis
- ODBC é uma fina camada sobre o JDBC
8Classes JDBC
- A classe superior na hierarquia é a DriverManager
- O JDBC identifica um banco de dados com um URL
- jdbcodbcltODBC DSNgtUserltusernamegtPWltpasswordgt
- DriverManager retorna um objeto Connection com o
uso do método getConnection() - A classe Connection efetua a conexão com banco de
dados
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") Con
nection con DriverManager.getConnection("jdbcod
bc odbcContAcad", "",
"")
9Classes JDBC
- As operações de conexão e acesso a banco devem
ser realizadas em um bloco try...catch - Por exemplo
try .... catch (SQLException ex)
System.out.println(ex.getMessage()) catch
(java.lang.Exception ex)
System.out.println(ex.getMessage()) //fim
catch
10Classes JDBC
- Cria-se os objetos Statement / PreparedStatement
/ CallableStatement - Quando o método executeQuery() é executado, um
objeto ResultSet é retornado - O ResultSet contém linhas de dados que são
analisadas com o método next() - O método executeUpdate() faz atualizações e
exclusões e retorna o número de linhas afetadas
11Aplicativo JDBC
- Uma instrução SQL pode ser executada
imediatamente(objeto Statement) - Uma instrução SQL pode ser compilada(objeto
PreparedStatement) - Uma instrução SQL pode ser uma chamada para uma
Stored Procedure(objeto CallableStatement)
12Aplicativo JDBC
- O método executeQuery() é utilizado para a
submissão de comandos de consulta ao BD(SELECT) - Qdo o método executeQuery() é executado, um
objeto ResultSet é retornado - O ResultSet contém linhas de dados que são
analisadas com o método next()
13Aplicativo JDBC
- O ResultSet contém linhas de dados que são
analisadas com o método next()
Statement stmt con.createStatement() ResultSet
rs stmt.executeQuery("SELECT FROM Turma")
while(rs.next()) System.out.println(rs.ge
tString(1))
- O método next()
- Retorna um boolean
- Posiciona o cusor na próxima linha (inicialmente
o cursor está antes da primeira linha - String getString(int indiceColuna)
- String getString(String nomeColuna)
- getString, getInt, getDouble, etc.
14Aplicativo JDBC
- As instruções SQL de atualização(INSERT e UPDATE)
e exclusão (DELETE) retornam um número inteiro
que denota o número de linhas afetadas - Por exemplo
- Statement stmt con.createStatement()
- int i stmt.executeUpdate(INSERT INTO Turma
VALUES (\001\, \Turma001\) ")
15Aplicativo JDBC
- Para essas instruções e também para a execução de
comando DDL(CREATE, DROP, etc.), o método
executeUpdate() é utilizado - Por Exemplo
- Statement stmt con.createStatement()
- ResultSet rs stmt.executeQuery(INSERT INTO
Turma VALUES (\001\, \Turma001\) ") - while(rs.next())
- System.out.println(rs.getString(1))
-
16PrepareStatement
- Statement pré-compilado
- Melhoria de performance
- Utilização de parâmetros
String sql SELECT FROM Turma WHERE CodTurma
? PrepareStatement ps con.prepareStatement(sq
l) ps.setString(1,001) ResultSet rs
ps.executeQuery()
17CallableStatement
- Utilizado na chamada de stored procedures
String proc call cons_Turmas CallableStateme
nt cs con.prepareCal(proc) cs.execute()
18Transações
- Corresponde a um grupo de operações de devem ser
executadas de forma atômica. - Para implementar uma transação deve-se
- Iniciar a transação
- Executar comandos
- Confirmar ou Desfazer a transação
- Utilizam-se os métodos da interface Connection
- setAutoCommit (boolean autoCommit)
- autoCommit true (o commit é realizado
automaticamente após o término de cada operação
executada pelo Statement) - commit() transação com sucesso
- roolback() falha na transação
19Transações
- ...
- try
- con.setAutoCommint(false)
- stmt.executeUpdate(...)
- con.commit()
- catch (SQLException ex)
- System.out.println(ex.getMessage())
- con.rollback()
- catch (java.lang.Exception ex)
- System.out.println(ex.getMessage())
- //fim catch
- con.setAutoCommint(true)
- ...
20Acesso ao BD - Exemplo ODBC-JDBC
- O acesso a um banco de dados pode ser feito por
meio do JDBC e da ponte JDBC-ODBC - Precisa-se configurar uma fonte de dados ODBC
- O método getConnection() requer um nome de fonte
de dados(DSN), ID do usuárioe senha para a fonte
de dados ODBC - O programa ODBC setup permite que se configure a
fonte de dados
21Tipos de drivers JDBC
- Tipo 1 Ponte JDBC-ODBC
- Tipo 2 Parte Java, parte código nativo
- Tipo 3 Servidor intemediário de acesso a dados
- Tipo 4 Puro Java
22Tipo 1 Ponte JDBC-ODBC
Aplicação
API JDBC
ODBC
Ponte JDBC/ODBC
Banco de Dados
23Tipo 1 Ponte JDBC-ODBC
- Acompanha o J2SE
- Deve-se ter um driver ODBC disponível na máquina
- Faz acesso JDBC usando drivers ODBC
- Perde em performance
24Tipo 2 Java-Nativo
Aplicação
API JDBC
API Nativa
Driver JDBC
Banco de Dados
25Tipo 2 Java-Nativo
- Chamadas à API JDBC são convertidas em chamadas à
API do BD - Performance melhor que o do Tipo 1
26Tipo 3 Servidor Intermediário
Aplicação
Servidor de drivers JDBC
API JDBC
Driver JDBC
Driver Nativo
Banco de Dados
27Tipo 3 Servidor Intermediário
- Traduz chamadas JDBC para um protocolo de rede
independente de BD - O servidor intermediário traduz as mensagens para
o protocolo nativo do BD - O servidor pode se conectar com vários tipos de
BD - Servidor de Aplicações
28Tipo 4 Puro Java
Aplicação
API JDBC
Driver JDBC
Banco de Dados
29Tipo 4 Puro Java
- Performance melhor que as dos tipos anteriores
- Chamadas à API JDBC são convertidas para o
protocolo de rede usado pelo BD - Drivers deste tipo são mais simples de usar e
instalar - Ex thin -gt Oracle