POO Unidade10 Acessodados JDBC

Livre

0
0
49
1 year ago
Preview
Full text

  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

  Programação OO em Java

  

“O futuro tem muitos nomes. Para os

fracos é o inatingível. Para os temerosos,

o desconhecido. Para os valentes é a

oportunidade:”

  Victor Hugo.

  Programação OO em Java

  Unidades X: Acesso a Bancos de Dados (JDBC)

  Programação OO em Java

  O QUE É JDBC

  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;

  JAVA E JDBC

  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;

   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 :

  CARACTERÍSTICAS DE JDBC

  O QUE JDBC FAZ?

  De maneira simplificada JDBC faz seis coisas : 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.

  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 java ?

  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:

  • – – MDAC da Microsoft

  ARQUITETURAS JDBC

   Modelo em duas camadas;

   Modelo em três camadas;

  ARQUITETURAS JDBC 1 - MODELO EM DUAS CAMADAS

  Acesso ao Banco LAN ou Intranet Disco Local Servidor de Java e e Outras

  BD JDBC Fontes Máquina Cliente

  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.

  • – • Segurança, Aplicação Pesada (Fat).

  1.3-Desvantagens:

  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

  ARQUITETURAS JDBC

  ARQUITETURAS JDBC

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

  Observações

  • 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

  • Performance e Gerenciamento.

TIPOS DE DRIVERS JDBC

   Ponte JDBC-ODBC

   Acesso Nativo

   Acesso por Middleware

  

Acesso Direto ao Servidor

TIPOS DE DRIVERS JDBC

  1 – Ponte JDBC-ODBC

   ODBC e as envia ao driver ODBC;

   Convertem chamadas JDBC em chamadas

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

TIPOS DE DRIVERS JDBC

  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;

  • Oracle e Sybase), InfoZoom(SQL Server e Access), etc.

  Ex: IBM DB2, BEA WebLogic(SQL Server,

TIPOS DE DRIVERS JDBC

  3 - Acesso por Middleware

   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;

   Convertem chamadas JDBC em um

   

   Esta é a mais flexível alternativa de JDBC;

   Suportam o acesso pela internet;

   Precisam de cuidados adicionais com a segurança;

  • SQL Server, Access, Oracle, Sysbase, Informix), etc.

  Ex: DataDirect (SQL Server), CONNX (DB2,

TIPOS DE DRIVERS JDBC

  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.

ARQUITETURA JDBC

  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 Driver Tipo 4

  Código nativo Protocolo de rede Proprietário SGBD Middleware Protocolo de rede aberto Protocolo Proprietário SGBD Protocolo Proprietário SGBD Código nativo Driver ODBC Protocolo Proprietário SGBD pacote java.sql

CLASSES DE DRIVERS

  DIRETOS ODBC-BRIDGE

  JDBC

  

Lista Completa: http://servlet.java.sun.com/products/

jdbc/drivers

DRIVER MANAGER

   A classe DriverManager é uma camada de gerenciamento do JDBC;

   Responsável pela interface entre os usuários e os drivers;

JDBC INTERFACES

  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.

  TRANSAđỏES EM JDBC

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

STORED PROCEDURES COM

  JDBC

   Permite usar as particularidades do SGBD; Diminui a portabilidade através dos

   SGBD’s; Portabilidade - SQL 92;  getConnection

  Client DriverManager

  createStatement

  ResultSet

  executQuery

  3

next

  4

get

  5 close

  7 close

  8

  6 repeat

  CENÁRIO DE UMA APLICAđấO JDBC

1 Connection

2 Statement

MAPEAMENTO ENTRE TIPOS

  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

  SQL E TIPOS JAVA

MAPEAMENTO ENTRE TIPOS

  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

  SQL E TIPOS JAVA

MAPEAMENTO ENTRE TIPOS

  Java type SQL type String

  java.lang.Bignum NUMERIC boolean BIT byte TINYINT short SMALLINT int

  

INTEGER

long BIGINT float REAL double DOUBLE byte[]

  java.sql.Date DATE

  SQL E TIPOS JAVA

VARCHAR OU LONGVARCHAR

VARBINARY OU LONGVARBINARY

  ACESSANDO BD’S EM DUAS CAMADAS

  

PROCEDIMENTOS NECESSÁRIOS PARA

ACESSAR BD’S UTILIZANDO JAVA NESTE EXEMPLO UTILIZAREMOS O DRIVER JDBC-ODBC BRIDGE DA SUN EM UMA ARQUITETURA DE DUAS CAMADAS.

  

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 PASSO 5: FECHAMENTO DA CONEXÃO

  PROCEDIMENTOS NECESSÁRIOS

PARA ACESSAR BD’S UTILIZANDO

JAVA

  

PASSO 1: IMPORTAđấO DOS PACOTES NECESSÁRIOS

  import java.sql.*;

  PROCEDIMENTOS NECESSÁRIOS PARA ACESSAR BD’S UTILIZANDO JAVA PASSO 2: REGISTRO DO(S) DRIVER(S)

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

  PASSO 3: ABERTURA DA CONEXÃO

  String url = "jdbc:odbc:my-dsn"; Connection con = DriverManager.getConnection(url,"usuario","senha");

  PROCEDIMENTOS NECESSÁRIOS PARA ACESSAR BD’S UTILIZANDO JAVA

  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.

  PROCEDIMENTOS NECESSÁRIOS PARA ACESSAR BD’S UTILIZANDO JAVA

  PROCEDIMENTOS NECESSÁRIOS

PARA ACESSAR BD’S UTILIZANDO

JAVA

  PASSO 5: FECHAMENTO DA CONEXÃO

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

  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, com setXXX() onde XXX é um tipo

igual aos retornados pelos métodos

de ResultSet

  PreparedStatement ...

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

  Stored Procedures

   Stored Procedures (Proc. Armazenados)

  • Procedimentos desenvolvidos em

    linguagem proprietária do SGBD (PL-

    SQL, Transact-SQL, etc) Podem ser chamados através de objetos
  • CallableStatement
  • Parâmetros são passados da mesma forma que em instruções PreparedStatement

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

  Sintaxe

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

  Stored Procedures ...

  

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

CallableStatement cstmt = con.prepareCall (command); cstmt.setInt(1, cliente_id); cstmt.setString(2, nome_cliente.trim()); cstmt.execute(); ...

  Stored Procedures ...

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

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

  Metadados

   Classe DatabaseMetaData

  • Permite obter informações relacionadas ao banco de dados

   Classe ResultSetMetaData

  • Permite obter informações sobre o ResultSet, como por exemplo quantas colunas e linhas existem na tabela de

    resultados, o nome das colunas, etc.

  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++) nomeCols[i] = meta.getColumnName(i); ...

  MEDIDAS DE SEGURANÇA

  

Não é seguro transmitir o login e a

   senha do usuário através da Internet; Solução: usar procedimentos

   armazenados e tirar o direito de modificar diretamente os dados;

  JDBC 2.0

   versão 1.0:

  Supera diversas limitações da

  • navegação bidirecional posicionamento absoluto
  • – –

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

  • row sets (cursores desconectados)

    connection pooling (reutilização de

  • conexões)

   Muitos drivers ainda não implementam

  Características são opcionais

  • estas novas características

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

  JBuilder)

  EXERCÍCIO S

   Altere as definições de banco vistas

na aula para que poupanças e contas

especiais possam ser armazenadas

no banco de dados.

Novo documento