Progamação OO com Java

Propaganda
Linguagens de Programação Orientadas a Objetos
Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa
Marco Fagundes
[email protected]
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
1 de 22
Acessando 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
2 de 22
Funcionamento 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
3 de 22
Estrutura do JDBC
Aplicativo Java
API JDBC
Gerenciador de driver JDBC
Ponte
JDBC-ODBC
ODBC e BD
Drivers
Driver A
...
Drivers JDBC
Protocolo de Acesso Proprietários dos BDs
4 de 22
Funcionamento 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.
5 de 22
Tipos Importantes


Interfaces
• Driver
• Connection
• Statement
• PreparedStatement (sql com parametros)
• CallableStatement (stored procedure)
• ResultSet
Classes
• DriverManager
• Date
• Time
6 de 22
Acessando 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
7 de 22
Classes JDBC


A classe superior na hierarquia é a DriverManager
O JDBC identifica um banco de dados com um URL:
• jdbc:odbc:<ODBC DSN>:User=<username>:PW=<password>


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");
Connection con =
DriverManager.getConnection("jdbc:odbc:
odbcContAcad", "", "");
8 de 22
Classes 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
9 de 22
Classes 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
10 de 22
Aplicativo 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)
11 de 22
Aplicativo 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()
12 de 22
Aplicativo 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.getString(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.
13 de 22
Aplicativo 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\’) ");
14 de 22
Aplicativo 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));
}
15 de 22
PrepareStatement



Statement pré-compilado
Melhoria de performance
Utilização de parâmetros
String sql = “SELECT * FROM Turma WHERE CodTurma =?”;
PrepareStatement ps = con.prepareStatement(sql);
ps.setString(1,”001”);
ResultSet rs = ps.executeQuery();
16 de 22
CallableStatement

Utilizado na chamada de stored procedures
String proc = “{call cons_Turmas”;
CallableStatement cs = con.prepareCal(proc);
cs.execute();
17 de 22
Transaçõ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
18 de 22
Transaçõ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);
...
19 de 22
Acesso 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
20 de 22
Tipos de drivers JDBC




Tipo
Tipo
Tipo
Tipo
1:
2:
3:
4:
Ponte JDBC-ODBC
Parte Java, parte código nativo
Servidor intemediário de acesso a dados
Puro Java
21 de 22
Tipo 1: Ponte JDBC-ODBC
Aplicação
API
JDBC
Ponte
JDBC/ODBC
ODBC
Banco
de Dados
22 de 22
Tipo 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
23 de 22
Tipo 2: Java-Nativo
Aplicação
API
JDBC
Driver JDBC
API
Nativa
Banco
de Dados
24 de 22
Tipo 2: Java-Nativo


Chamadas à API JDBC são convertidas em chamadas à
API do BD
Performance melhor que o do Tipo 1
25 de 22
Tipo 3: Servidor Intermediário
Aplicação
API
JDBC
Driver JDBC
Servidor de
drivers
JDBC
Driver
Nativo
Banco
de Dados
26 de 22
Tipo 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
27 de 22
Tipo 4: Puro Java
Aplicação
API
JDBC
Driver JDBC
Banco
de Dados
28 de 22
Tipo 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 -> Oracle
29 de 22
Download