de 22 1 linguagens de programação orientadas a objetos pós-gradução(lato-sensu) em sistemas de...
TRANSCRIPT
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
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
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
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
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.
6 de 22
Tipos Importantes
Interfaces• Driver• Connection• Statement• PreparedStatement (sql com parametros)• CallableStatement (stored procedure)• ResultSet
Classes• DriverManager• Date• Time
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
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", "", "");
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
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
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)
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()
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.
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\’) ");
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));
}
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();
17 de 22
CallableStatement
Utilizado na chamada de stored procedures
String proc = “{call cons_Turmas”;
CallableStatement cs = con.prepareCal(proc);
cs.execute();
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
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);...
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
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
22 de 22
Tipo 1: Ponte JDBC-ODBC
Banco de Dados
ODBC
Aplicação
APIJDBC
PonteJDBC/ODBC
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
24 de 22
Tipo 2: Java-Nativo
Banco de Dados
APINativa
Aplicação
APIJDBC Driver JDBC
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
26 de 22
Tipo 3: Servidor Intermediário
Banco de Dados
DriverNativo
Aplicação
APIJDBC Driver JDBC
Servidor de driversJDBC
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
28 de 22
Tipo 4: Puro Java
Banco de Dados
Aplicação
APIJDBC Driver JDBC
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