POO Unidade10 Acessodados JDBC

49 

Full text

(1)

José Maria Monteiro

Universidade Federal do Ceará - UFC

Universidade Federal do Ceará - UFC

Departamento de Computação

Departamento de Computação

monteiro@lia.ufc.br

monteiro@lia.ufc.br

(2)

“O futuro tem muitos nomes. Para os

fracos é o inatingível. Para os temerosos,

o desconhecido. Para os valentes é a

oportunidade:”

Victor Hugo.

(3)

Unidades X: Acesso a

Bancos de Dados

(JDBC)

(4)

Conjunto de classes e interfaces (API)

escritas em Java que faz o envio de cláusulas sql para qualquer banco de dados relacional;

Api de baixo nível e base para api’s de

alto nível;

Amplia o que você pode fazer com Java;Possibilita o uso de BD’s já instalados;

(5)

Java : não é mais necessário escrever um

programa para cada plataforma;

Jdbc : não é mais necessário escrever um

programa para cada tipo de banco de dados;

Escreva uma vez e execute em qualquer lugar;

Tempo de desenvolvimento reduzido;

Instalação e manutenção simplificadas;

Dissiminação da informação de maneira fácil e

econômica;

(6)

Fácil mapeamento objeto para relacional. Independência de banco de dados.

Computação distribuída.

Java e JDBC proporcionam aos programadores de

bancos de dados as seguintes características :

(7)

1 – Estabelece conexão com o banco de dados. 2 – Executa consultas.

3 – Recebe o conjunto de resultados das consultas.

4 – Executa stored procedures.

5 – Obtém informações sobre o banco de dados, tabelas, índices, visões, e stored procedures. 6 – Executa transações.

De maneira simplificada JDBC faz seis

coisas :

(8)

JDBC X ODBC

ODBC:

Atualmente o ODBC (Open Database

Conectivity) da Microsoft é a interface mais usada para acessar bancos de dados relacionais;

Possibilita conectar quase todos os

bancos de dados em quase todas as plataformas ;

Por que não usar odbc a partir de

(9)

JDBC X

ODBC

ODBC usa uma interface em C;

Chamadas de Java para códigos

em C trazem desvantagens em:

segurança, robustez e

portabilidade;

O ODBC deve ser instalado em

todas as máquinas clientes;

Exceções:

(10)

ARQUITETURAS

JDBC

Modelo em duas camadas;

(11)

1 - MODELO EM DUAS CAMADAS

Máquina Cliente Java e

JDBC

Servidor de BD

Disco Local e Outras

Fontes

Acesso ao Banco

LAN ou Intranet

(12)

ARQUITETURAS

JDBC

Observações

No modelo em Duas Camadas, um applet ou

uma aplicação Java conversa diretamente com o SGBD. Neste modelo, cláusulas SQL são enviadas do usuário para o banco, e os resultados são devolvidos para o usuário. O banco pode ser local ou remoto, neste último caso o usuário é conectado à base via rede, que pode ser uma Intranet ou Internet.

Vantagens:

Performance e Gerenciamento da Aplicação.1.3-Desvantagens:

(13)

2 - MODELO EM TRÊS CAMADAS

BD 1

BD 2 RPC ou

CORBA

Lógica de Negócios

Distribuição Adicional das

Lógicas de Negócios Application GUI

code

(14)

ARQUITETURAS

JDBC

Observações

No modelo em Três Camadas os comandos são

enviados do usuário para uma camada intermediária de serviços, a qual então manda cláusulas SQL para o banco. O banco processa as cláusulas SQL e manda os resultados para a camada intermediária, a qual então manda os resultados para o usuário.

Vantagens

Utilização em bancos de dados sem servidor (Dbase, Paradox, Access etc);

Possibilidade de uma camada de segurança;

Aplicação “leve” (Thin).Desvantagens

(15)

Ponte JDBC-ODBC

TIPOS DE DRIVERS JDBC

Acesso Nativo

Acesso por

Middleware

(16)

1 – Ponte JDBC-ODBC

Convertem chamadas JDBC em chamadas ODBC e as envia ao driver ODBC;

Possibilitam o uso indireto de drivers ODBC;

Necessidade de configurar o ODBC;

Mais apropriado para uma rede corporativa ou para aplicações usando arquitetura em três camadas;

Ex: sun jdbc-odbc bridge.

(17)

2 – Acesso Nativo

Convertem chamadas JDBC em chamadas

nativas do banco e comunicam-se

diretamente com o SGBD;

Apresentam ganhos de performance; Mais apropriado para uma rede

corporativa;

Ex: IBM DB2, BEA WebLogic(SQL Server, Oracle e Sybase), InfoZoom(SQL Server e Access), etc.

(18)

3 - Acesso por Middleware

Convertem chamadas JDBC em um

protocolo de rede independente do SGBD e comunicam-se com um gateway que traduz estas requisições para o protocolo

específico do SGBD;

Possibilitam o uso de diferentes SGBD’s; Esta é a mais flexível alternativa de JDBC; Suportam o acesso pela internet;

Precisam de cuidados adicionais com a segurança;

Ex: DataDirect (SQL Server), CONNX (DB2, SQL Server, Access, Oracle, Sysbase, Informix), etc.

(19)

4 – Acesso Direto ao

Servidor

Convertem chamadas JDBC para um

protocolo de rede usado diretamente pelo SGBD;

Suportam o acesso pela Internet; São geralmente específicos para determinada base de dados;

Ex: Atinav (SQL Server), BEA WebLogic(SQL Server e Informix), DataDirect(Oracle e SQL Server), etc.

(20)

BD BD BD BD

JDBC Driver Manager

API JDBC

Aplicação Aplicação Aplicação

Protocolo JDBC Driver Tipo 2 Driver Tipo 1 Driver

Tipo 3 Tipo 4Driver

(21)

DIRETOS ODBC-BRIDGE

CLASSES DE DRIVERS

JDBC

(22)

A classe DriverManager é uma

camada de gerenciamento do JDBC;

Responsável pela interface entre os

usuários e os drivers;

(23)

Interface Descrição

Connection Representa a conexão com o banco especificado. Dentro do contexo da conexão, cláusulas SQL são executadas e os resultados são

devolvidos.

DatabaseMetaData Usado para obter informações sobre as bases, tabelas, índices, tipos de campos, etc.

Statement Usado para executar cláusulas SQL estáticas e obter os resultados produzidos por elas.

PreparedStatement Usado para executar cláusulas SQL que se repetem várias vezes de maneira eficiente e executar consultas parametrizadas. Instâncias de PreparedStatement contêm cláusulas SQL já compiladas.

CallableStatement Usado para executar SQL stored procedures.

ResultSet Usado para acessar os dados retornados pelas cláusulas SQL executadas.

ResultSetMetaData Usado para obter informações sobre o conjunto dos resultados de uma cláusula SQL.

(24)

JDBC provê um modelo de controle de transações;

Cada nova conexão é iniciada no modo

autocommit;

JDBC implicitamente emite um commit após cada Statement executado;

Podemos desabilitar o autocommit; Após um commit ou um rollback,

automaticamente é iniciada uma nova transação;

Ex: con.setAutoCommit(false);

...

con.commit();

(25)

Permite usar as particularidades do

SGBD;

Diminui a portabilidade através dos

SGBD’s;

Portabilidade - SQL 92;

(26)

getConnection Client DriverManager 1 Connection createStatement 2 Statement ResultSet executQuery 3 next 4 get 5 close 7 close 8 6 repeat

(27)

SQL type Java type

CHAR String

VARCHAR String

LONGVARCHAR String

NUMERIC java.lang.Bignum

DECIMAL java.lang.Bignum

BIT boolean

TINYINT byte

SMALLINT short

INTEGER int

(28)

SQL type Java type

BIGINT long

REAL float

FLOAT double DOUBLE double BINARY byte[] VARBINARY byte[] LONGVARBINARY byte[]

DATE java.sql.Date

TIME java.sql.Time

TIMESTAMP java.sql.Timestamp

(29)

Java type SQL type

String VARCHAR OU LONGVARCHAR java.lang.Bignum NUMERIC

boolean BIT

byte TINYINT

short SMALLINT

int INTEGER

long BIGINT

float REAL

double DOUBLE

byte[] VARBINARY OU LONGVARBINARY java.sql.Date DATE

(30)

ACESSANDO BD’S

(31)

PROCEDIMENTOS NECESSÁRIOS PARA

ACESSAR BD’S UTILIZANDO JAVA

NESTE EXEMPLO UTILIZAREMOS O DRIVER JDBC-ODBC BRIDGE DA SUN

(32)

PROCEDIMENTOS NECESSÁRIOS

PARA ACESSAR BD’S UTILIZANDO

JAVA

PASSO 1: IMPORTAÇÃO DOS PACOTES NECESSÁRIOS

PASSO 2: REGISTRO DO(S) DRIVER(S)

PASSO 3: ABERTURA DA CONEXÃO

PASSO 4: EXECUÇÃO DE CONSULTAS E RECUPERAÇÃO DOS RESULTADOS

(33)

PROCEDIMENTOS NECESSÁRIOS

PARA ACESSAR BD’S UTILIZANDO

JAVA

PASSO 1: IMPORTAÇÃO DOS PACOTES NECESSÁRIOS

(34)

PASSO 2: REGISTRO DO(S) DRIVER(S)

Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver");

PROCEDIMENTOS NECESSÁRIOS

(35)

PASSO 3: ABERTURA DA CONEXÃO

String url = "jdbc:odbc:my-dsn"; Connection con =

DriverManager.getConnection(url,"usuario","senha");

PROCEDIMENTOS NECESSÁRIOS

(36)

PASSO 4: EXECUÇÃO DE CONSULTAS E RECUPERAÇÃO DOS RESULTADOS

Statement stmt = con.createStatement();

ResultSet rs = stmt.executeQuery("Select a, b, c, d from Table1");

while (rs.next()){

int a = rs.getInt(1);// int a = rs.getInt(“a”);//

BigDecimal b = rs.getBigDecimal(2,0); char c[] = rs.getString(3).toCharArray(); boolean d = rs.getBoolean(4);

}

OBS: O cursor de um ResultSet é inicialmente posicionado antes da primeira linha da tabela.

(37)

PASSO 5: FECHAMENTO DA CONEXÃO

stmt.close(); con.close();

(38)

PreparedStatement

Statement pré-compilado

Apresenta ganhos de eficiência quando

várias consultas similares são enviadas com parâmetros diferentes

Uma String com a instrução SQL é

preparada previamente, deixando-se

“?” no lugar dos parâmetros

Parâmetros são inseridos em ordem,

(39)

...

String sql = “INSERT INTO Conta VALUES(?, ?, ?)”; PreparedStatement cstmt =

con.preparedStatement(sql); cstmt.setString(1, “123”);

cstmt.setDouble(2, 0); cstmt.setString(3, “C”); cstmt.executeUpdate(); ...

(40)

Stored Procedures

Stored Procedures (Proc.

Armazenados)

Procedimentos desenvolvidos em

linguagem proprietária do SGBD (PL-SQL, Transact-(PL-SQL, etc)

Podem ser chamados através de objetos

CallableStatement

Parâmetros são passados da mesma

forma que em instruções

PreparedStatement

Sintaxe

con.prepareCall(“{call proc_update}”);con.prepareCall(“{call

proc_update(?)}”);

con.prepareCall(“{? = call

(41)

...

String command = "{call INS_CLIENTES(?,?)}"; CallableStatement cstmt = con.prepareCall

(command);

cstmt.setInt(1, cliente_id);

cstmt.setString(2, nome_cliente.trim()); cstmt.execute();

...

(42)

...

String command = "{? = call INS_CLIENTES(?,?)}";

CallableStatement cstmt = con.prepareCall (command);

cstmt.setInt(1, cliente_id);

cstmt.setString(2, nome_cliente.trim()); ResultSet rs = cstmt.executeQuery(); ...

(43)

Stored Procedures

...

String command = "{call INS_CLIENTES(?, ?, ?)}"; CallableStatement cstmt = con.prepareCall

(command);

cstmt.registerOutParameter(3, 3); cstmt.setInt(1, cliente_id);

cstmt.setString(2, nome_cliente.trim()); cstmt.execute();

System.out.println("Retorno: " + cstmt.getInt(3));

(44)

Metadados

Classe DatabaseMetaData

Permite obter informações relacionadas

ao banco de dados

Classe ResultSetMetaData

Permite obter informações sobre o

(45)

Metadados

...

Connection con;

DatabaseMetaData dbdata = con.getMetaData(); String dbname =

dbdata.getDatabaseProductName(); ...

...

ResultSet rs;

ResultSetMetaData meta = rs.getMetaData(); int col = meta.getColumnCount();

String [] nomeCols = new String[col]; for (int i=0; i<col; i++)

(46)

MEDIDAS DE

SEGURANÇA

Não é seguro transmitir o login e a

senha do usuário através da Internet;

Solução: usar procedimentos

(47)

JDBC 2.0

Supera diversas limitações da

versão 1.0:

navegação bidirecional

posicionamento absoluto

atualizações/inserções/remoções via

cursor

row sets (cursores desconectados)connection pooling (reutilização de

conexões)

Características são opcionais

Muitos drivers ainda não implementam

(48)

JDBC COMO

INFRA-ESTRUTURA

JDBC proposta como a infra-estrutura

de baixo nível para integração de Java

com BDs

Soluções de alto nível (sobre JDBC):

SQLJ (Oracle, IBM, Sun...) - integração Java/

SQL (Embedded SQL, SQL Types e SQL Routines)

Java Data Objects (Sun) - persistência

transparente (possivelmente através de mapeamento objeto-relacional)

soluções proprietárias (ex.: componentes

(49)

EXERCÍCIO

S

Altere as definições de banco vistas

Figure

Updating...

References

Updating...

Download now (49 pages)