De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de...

29
1 de 22 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

Transcript of De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de...

Page 1: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

1 de 22

Linguagens de Programação Orientadas a Objetos

Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa

Marco [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

Page 2: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

2 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

Page 3: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

3 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

Page 4: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

4 de 22

Estrutura do JDBC

API JDBC

Drivers JDBC

Aplicativo Java

Gerenciador de driver JDBC

PonteJDBC-ODBC

Driver A

ODBC e BDDrivers

...

Protocolo de Acesso Proprietários dos BDs

Page 5: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

5 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.

Page 6: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

6 de 22

Tipos Importantes

Interfaces• Driver• Connection• Statement• PreparedStatement (sql com parametros)• CallableStatement (stored procedure)• ResultSet

Classes• DriverManager• Date• Time

Page 7: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

7 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

Page 8: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

8 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", "", "");

Page 9: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

9 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

Page 10: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

10 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

Page 11: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

11 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)

Page 12: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

12 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()

Page 13: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

13 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.

Page 14: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

14 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\’) ");

Page 15: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

15 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));

}

Page 16: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

16 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();

Page 17: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

17 de 22

CallableStatement

Utilizado na chamada de stored procedures

String proc = “{call cons_Turmas”;

CallableStatement cs = con.prepareCal(proc);

cs.execute();

Page 18: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

18 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

Page 19: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

19 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);...

Page 20: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

20 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

Page 21: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

21 de 22

Tipos 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

Page 22: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

22 de 22

Tipo 1: Ponte JDBC-ODBC

Banco de Dados

ODBC

Aplicação

APIJDBC

PonteJDBC/ODBC

Page 23: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

23 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

Page 24: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

24 de 22

Tipo 2: Java-Nativo

Banco de Dados

APINativa

Aplicação

APIJDBC Driver JDBC

Page 25: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

25 de 22

Tipo 2: Java-Nativo

Chamadas à API JDBC são convertidas em chamadas à API do BD

Performance melhor que o do Tipo 1

Page 26: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

26 de 22

Tipo 3: Servidor Intermediário

Banco de Dados

DriverNativo

Aplicação

APIJDBC Driver JDBC

Servidor de driversJDBC

Page 27: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

27 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

Page 28: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

28 de 22

Tipo 4: Puro Java

Banco de Dados

Aplicação

APIJDBC Driver JDBC

Page 29: De 22 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes mafm@cin.ufpe.br Aula.

29 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