Transcript
Page 1: Conectividade - cin.ufpe.brcin.ufpe.br/~if685/conectividade.pdf · Java API JDBC JDBC/ODBC Bridge Camada ODBC API ODBC Fonte de Dados 26 CIn.ufpe.br Tipo 2: Parte Java, parte Nativo

1

CIn.ufpe.br

Fernando Fonseca

Ana CarolinaRobson Fidalgo

Gerenciamento de Dados e Informação

Conectividade

CIn.ufpe.br

Conectividade

O surgimento de ambientes com a arquiteturacliente-servidor compostos por diferentesplataformas vindas de diversos fabricantes requerdas aplicações a necessidade de comunicar-secom outras aplicações para poderem compartilhardados e/ou invocar processos que sejam comuns

2

CIn.ufpe.br

Conectividade

Nos primórdios dos SGBD, toda a conectividade aBD era feita por meio de aplicações escritas paratrabalhar exclusivamente com um SGBDespecífico

Existiam dezenas de produtos para BD e cadaum usava uma linguagem proprietáriaAs aplicações eram dependentes daslinguagens dos sistemas de BDSe uma aplicação existente necessitasse seconectar a um BD em outro SGBD, eranecessário modificá-la para uma novalinguagem

3

CIn.ufpe.br

Conectividade

SGBD

Protocolo comum

Gateway

Interfaces de

comandos padronizados

4

CIn.ufpe.br

Uso de SGBD

Modelo de dados deve abrigar construçõesexistentes nos modelos locaisO SGBD escolhido deve possuir a funcionalidadenecessária para atuar como um SGBD global

Multibanco de dados

5

CIn.ufpe.br

Uso de Protocolo comum de acesso a dados

Baseado na padronização do protocolo utilizado nacomunicação dos diversos componentes doambiente distribuído

RDA (Remote Database Access) - ISO

EDA/SQL (Enterprise Database Access/ SQL) -Information BuildersCORBA (Common Object Request BrokerArchitecture) – OMG...

6

Page 2: Conectividade - cin.ufpe.brcin.ufpe.br/~if685/conectividade.pdf · Java API JDBC JDBC/ODBC Bridge Camada ODBC API ODBC Fonte de Dados 26 CIn.ufpe.br Tipo 2: Parte Java, parte Nativo

2

CIn.ufpe.br

Uso de Gateway

Tradutores de comandos de acesso a dadosNão possuem funcionalidades de SGBDPodem vir acoplados a SGBD

Normalmente são soluções proprietárias paraconectarem fontes de dados específicas

7

CIn.ufpe.br

Interfaces de ComandosPadronizados

SAG - SQL Access GroupPadrão de interoperabilidade

Qualquer cliente BD pode se comunicardiretamente com qualquer servidor de BDUtilização de formatos de mensagens eprotocolos comunsCria interface SQL com função de chamada(Call Level Interface - CLI)

8

CIn.ufpe.br

Interfaces de ComandosPadronizados

SAG - SQL Access GroupPadrão de interoperabilidade (Cont.)

9

Uma CLI é, simplesmente, uma interface

procedural para SQL

Uma CLI requer o uso de um driver

específico para cada SGBD de modo a

traduzir as chamadas da aplicação para a

linguagem nativa de acesso ao SGBD

IDAPI, ODBC, JDBC, ...

CIn.ufpe.br

Interfaces de Comandos Padronizados

Conjunto comum de API (ApplicationProgramming Interface)

Para SGBD de diversos fabricantesConexão com BD por meio de driver localPreparar solicitações SQLExecutar solicitaçõesRecuperar resultadosEncerrar conexão

10

CIn.ufpe.br

ODBC

Open Database ConectivityMicrosoftImplementações de terceiros - Unix

ComponentesAPIFunções para gerenciar os driversDrivers

11

CIn.ufpe.br

ODBC

Driver

Oracle

Driver

SQL Server

Driver

Xbase ...

Gerenciador de Drivers

Interface ODBC

Aplicação

SGBD

Oracle

Dados

Fonte de

Dados

SGBD

SQL Server

Dados

Fonte de

Dados

Dados

Fonte de

Dados

Outros

SGBD

Arquitetura

em Camadas

12

Page 3: Conectividade - cin.ufpe.brcin.ufpe.br/~if685/conectividade.pdf · Java API JDBC JDBC/ODBC Bridge Camada ODBC API ODBC Fonte de Dados 26 CIn.ufpe.br Tipo 2: Parte Java, parte Nativo

3

CIn.ufpe.br

ODBC - Arquitetura

Aplicação (Camada 1)Um programa que chama funções ODBC parainteragir com fontes de dados

Uma planilha ExcelUma ferramenta de relatórioUm documento WordUma aplicação web...

13

CIn.ufpe.br

ODBC - ArquiteturaGerenciador de Drivers (Camada 2)

Carrega os drivers, direcionando as chamadasde funções ao driver ODBC correto

Provê acesso aos drivers ODBCIntercepta as chamadas da aplicação para obanco de dadosPermite que múltiplos drivers estejam ativossimultaneamente

Carrega e descarrega drivers, verifica status eadministra múltiplas conexões entreaplicações e fontes de dados

14

CIn.ufpe.br

ODBC - Arquitetura

Drivers (Camada 3)É uma biblioteca de funções que processa assolicitações ODBC, enviando instruções SQLespecíficas para cada fonte de dadosTraduz cada requisição para o formatoapropriado do SGBD (Mediador)Conecta uma fonte de dados, traduz comandosSQL e os submete à fonte de dados, recuperainformações da referida fonte e retorna dadospara a aplicaçãoSe a fonte é Xbase (não usa SQL), o drivertambém deve processar os comandos SQL.

15

CIn.ufpe.br

ODBC - Arquitetura

Fontes de Dados (Camada 4)Trata-se dos dados propriamente ditosCada fonte de dados deve possuir um driverapropriado para que a intermediação possa serestabelecida

16

CIn.ufpe.br

ODBCConfiguração

17

CIn.ufpe.br

ODBCConfiguração

18

Page 4: Conectividade - cin.ufpe.brcin.ufpe.br/~if685/conectividade.pdf · Java API JDBC JDBC/ODBC Bridge Camada ODBC API ODBC Fonte de Dados 26 CIn.ufpe.br Tipo 2: Parte Java, parte Nativo

4

CIn.ufpe.br

Conectividade com Java

ObtençãoDefinição de uma camada de serviço depersistência que utiliza SGBD relacionais

19

CIn.ufpe.br

Conectando Java a um BD Relacional

SGBD

Tabela de Hospitais

CGC Nome leitos

1 Restauracao 1000

2 Portugues 900

. . .

Hospital

int CGC

String nome

int leitos

Métodos

...

Java

20

CIn.ufpe.br

JDBCTM –Java Database Connectivity

API para acesso a SGBD (Sistemas deGerenciamento de Banco de Dados) utilizandoJava

Estabelece uma conexão com o SGBD

Envia comandos SQL para o SGBDProcessa os resultados

Protocolo JDBCDefine regras de comunicação entre umaaplicação Java e um SGBDNecessidade de um driver para efetivar acomunicação (inserido no CLASSPATH)

21

CIn.ufpe.br

Arquitetura de JDBC

JDBC é composto por três componentesprincipais: API, Driver Manager e os DriversJDBC

Oracle 11g

22

CIn.ufpe.br

Tipos de Driver JDBC

Tipo 1 (JDBC-ODBC Bridge)Transforma JDBC em ODBC e se utiliza desseúltimo para comunicação com o SGBD

Tipo 2 (Driver parcial)Mapeia chamadas JDBC para uma API nativa doSGBD. Precisa de código específico de plataformaalém da biblioteca Java

23

CIn.ufpe.br

Tipos de Driver JDBC

Tipo 3 (Drivers Middleware)Driver puro Java para um servidor middleware quedê suporte a clientes JDBC. Utiliza protocoloindependente de SGBD particular

Tipo 4 (Direct-to-database)Driver puro Java que permite a conexão com umservidor de banco de dados. Utiliza protocoloespecífico de um SGBD

24

Page 5: Conectividade - cin.ufpe.brcin.ufpe.br/~if685/conectividade.pdf · Java API JDBC JDBC/ODBC Bridge Camada ODBC API ODBC Fonte de Dados 26 CIn.ufpe.br Tipo 2: Parte Java, parte Nativo

5

CIn.ufpe.br

Tipo 1: JDBC/ODBC Bridge

Vem com o J2SEFaz acesso JDBC usando drivers ODBCUm driver ODBC deve estar disponível namáquinaUsa código nativoPerde em desempenho porque passa por duascamadas (JDBC e ODBC)Recomendado apenas para testes ou para usoem aplicações não-críticas

25

CIn.ufpe.br

BD

Java

Tipo 1: JDBC-ODBC Bridge

AplicaçãoJava

APIJDBC

JDBC/ODBCBridge

CamadaODBC

APIODBC

Fonte deDados

26

CIn.ufpe.br

Tipo 2: Parte Java, parte Nativo

Um driver Tipo 2 converte chamadas à API JDBCem chamadas à API do SGBDMais rápido que a JDBC/ODBC Bridge porquedispensa uma camada

27

CIn.ufpe.br

BDJava

Tipo 2: Parte Java, parte nativo

AplicaçãoJava

APIJDBC

DriverJDBC

APInativa

Fonte deDados

28

CIn.ufpe.br

Tipo 3: Servidor intermediário

Traduz chamadas à API JDBC para um protocolo derede independente de SGBDAs mensagens independentes de SGBD sãotraduzidas por um servidor intermediário para oprotocolo nativo do SGBDO servidor intermediário é capaz de se conectarcom vários tipos de SGBDArquitetura flexível oferecida por vários fabricantesservidores de aplicações

29

CIn.ufpe.br

BDJava

Tipo 3: Servidor intermediário

AplicaçãoJava

APIJDBC

Fonte deDados

DriverNativo

DriverJDBC

Servidor de driversJDBC

30

Page 6: Conectividade - cin.ufpe.brcin.ufpe.br/~if685/conectividade.pdf · Java API JDBC JDBC/ODBC Bridge Camada ODBC API ODBC Fonte de Dados 26 CIn.ufpe.br Tipo 2: Parte Java, parte Nativo

6

CIn.ufpe.br

Tipo 4: Puro Java

Converte chamadas à API JDBC diretamente para oprotocolo de rede usado pelo SGBDSão extremamente eficientes

A maioria dos fabricantes fornece drivers tipo 4 juntocom seus SGBD (Oracle, Sybase, IBM, Borland)

31

CIn.ufpe.br

BDJava

Tipo 4: Puro Java

Fonte deDados

AplicaçãoJava

APIJDBC

DriverJDBC

32

CIn.ufpe.br

Tipos de Drivers JDBC: Resumo

Os drivers Tipo 1 e 2 são apenas soluçõestemporárias e rápidas, enquanto soluções puroJava estavam sendo desenvolvidasOs drivers tipo 3 e 4 são os recomendados porserem puro JavaDrivers tipo 3 são mais flexíveis, mas exigem aquebra em camadasDrivers tipo 4 fazem acesso direto a SGBD e sãoos mais simples de usar e instalar

33

CIn.ufpe.br

API de JDBC

Pacote java.sql

InterfacesDriverConnectionStatementResultSetCallableStatementPreparedStatement

DatabaseMetaDataResultSetMetaDataArray

Blob Clob

Ref

34

CIn.ufpe.br

API de JDBC

Pacote java.sql

Interfaces (Cont.)

SQLData

SQLInput

SQLOutput

Struct

...

35

CIn.ufpe.br

API de JDBC

ClassesDriverManagerDateTimestampBatchUpdateException...

36

Page 7: Conectividade - cin.ufpe.brcin.ufpe.br/~if685/conectividade.pdf · Java API JDBC JDBC/ODBC Bridge Camada ODBC API ODBC Fonte de Dados 26 CIn.ufpe.br Tipo 2: Parte Java, parte Nativo

7

CIn.ufpe.br

API JDBC Standard Extension

Interfaces do pacote javax.sqlConnectionEventConnectionEventListenerConnectionPoolDataSourceCursorMovedEventCursorMovedListenerDataSourcePooledConnectionRowSetRowSetMetaData..

37

CIn.ufpe.br

API de JDBC

ResultSet

Statement

PreparedStatement

CallableStatement

Connection

DriverManager

Tipos de Dados: Date, Time, TimeStamp, Numeric, tipos Java

built-in, etc.

getXXX

executeQuery

execute

executeQuery

getMoreResults

getXXX

setXXX

createStatement

prepareStatement

prepareCall

getConnection

commit, abort

Pacote java.sql

38

CIn.ufpe.br

Conhecendo as Principais Classes

ConnectionSGBD

Statement

ResultSet

39

CIn.ufpe.br

Conhecendo as Principais Classes

Connection(conexão)isClosed( ) – testa se a conexão está fechadaclose( ) – fecha a conexãocreateStatement( ) – cria um comando

Statement(comando)close( ) – fecha o comandoexecuteQuery(String sql) – executa uma consultaem SQLexecuteUpdate(String sql) – faz uma atualizaçãode um registro numa tabela

40

CIn.ufpe.br

Conhecendo as Principais Classes

ResultSet (tabela)Tipos

forward-only

Não possui scroll e é insensitivescroll-insensitive

Não é sensível a mudanças no SGBDscroll-sensitive

É sensível a mudanças no SGBD

41

CIn.ufpe.br

Conhecendo as Principais Classes

ResultSet (tabela) (Cont.)

Habilidades

Scrolling (Rolagem)

Permite ao usuário mover-se para frente e

para trás no conjunto de resultados

Updatability

Permite atualizar automaticamente o Banco

de Dados, caso o usuário altere dados no

conjunto de resultados

42

Page 8: Conectividade - cin.ufpe.brcin.ufpe.br/~if685/conectividade.pdf · Java API JDBC JDBC/ODBC Bridge Camada ODBC API ODBC Fonte de Dados 26 CIn.ufpe.br Tipo 2: Parte Java, parte Nativo

8

CIn.ufpe.br

Conhecendo as Principais Classes

ScrollingPossibilita que a movimentação do cursor possa serrealizada em ambos os sentidos, por meio dosmétodosboolean previous( )

boolean next( )

boolean absolute(int row) throws SQLException

boolean relative(int rows)

ResultSet (tabela) (Cont.)

43

CIn.ufpe.br

Conhecendo as Principais Classes

Tipos de ConcorrênciaUma aplicação pode escolher entre dois tiposde controle de concorrência para um result set

Somente leituraNão permite atualização do seu conteúdoAtualizávelupdateXXX()

ResultSet (tabela) (Cont.)

44

CIn.ufpe.br

Conhecendo as Principais Classes

getInt(String coluna) – devolve o dado dedeterminada coluna como inteirogetString(String coluna) - devolve o dado dedeterminada coluna como string...

ResultSet (tabela) (Cont.)

45

CIn.ufpe.br

Passos para Acesso ao SGBD

Instalar um driver JDBC para o SGBDconsiderado e configurar o ambiente deexecuçãoCarregar e registrar o driver JDBC

Estabelecer uma conexão com o SGBDSubmeter a execução de comandos SQLLer os resultadosFechar a conexão

46

CIn.ufpe.br

Um BD Exemplo

Um Sistema de Saúde

47

CIn.ufpe.br

Registrando Drivers JDBC

Carregue o(s) driver(s) JDBCClass.forName(nome_do_driver)

O nome do driver é fornecido peloprovedor (Ex.: Oracle)

ExemploClass.forName("oracle.jdbc.driver.OracleDriver ")

11g48

Page 9: Conectividade - cin.ufpe.brcin.ufpe.br/~if685/conectividade.pdf · Java API JDBC JDBC/ODBC Bridge Camada ODBC API ODBC Fonte de Dados 26 CIn.ufpe.br Tipo 2: Parte Java, parte Nativo

9

CIn.ufpe.br

Estabelecendo uma conexão

Utilize o método getConnection da classejava.sql.DriverManager para abrir uma conexão como SGBDAssinatura de getConnectionstatic Connection getConnection(String url,

String user,String login) throws SQLException

Exemplo de url"jdbc:oracle:thin:@itapissuma.cin.ufpe.br:1521:dbdisc "

49

CIn.ufpe.br

java.sql.Connection

Assinatura dos MétodosStatement createStatement( ) throws SQLException

void setAutoCommit(boolean autocommit) throwsSQLException

void commit( ) throws SQLException

void rollback( ) throws SQLException

void close( ) throws SQLException

50

CIn.ufpe.br

Exemplo: Registrando Drivere Abrindo uma Conexão

//bloco necessario para abrir uma conexao

try{

Class.forName(" oracle.jdbc.driver.OracleDriver ");

Connection con =

DriverManager.getConnection("jdbc:oracle:thin:

@itapissuma.cin.ufpe.br:1521:dbdisc ", " user ", " passwd

");

} catch(ClassNotFoundException ex1){

ex1.printStackTrace();

} catch(SQLException ex2){

ex2.printStackTrace();

}

Login e

Senha no

Banco de

Dados

51

CIn.ufpe.br

Executando Comandos SQL

Utilizar a classe java.sql.Statement para enviarcomandos SQL para o SGBD

Criar um Statement a partir da conexão

Exemplo

Statement stmt = con.createStatement();

52

CIn.ufpe.br

java.sql.Statement

Assinatura dos Métodosint executeUpdate(String sql) throws SQLException

Para executar comandos DML - INSERT,UPDATE e DELETE - ou DDL - CREATE, DROP,etc.

ResultSet executeQuery(String sql) throwsSQLException

Para executar comandos SELECT

53

CIn.ufpe.br

java.sql.ResultSet

Assinatura dos Métodosboolean next( ) throws SQLException

Posiciona o cursor na próxima linha

Inicialmente o cursor está antes da primeira linhaString getString(int col) throws SQLExceptionString getString(String nomeColuna) throwsSQLException

54

Page 10: Conectividade - cin.ufpe.brcin.ufpe.br/~if685/conectividade.pdf · Java API JDBC JDBC/ODBC Bridge Camada ODBC API ODBC Fonte de Dados 26 CIn.ufpe.br Tipo 2: Parte Java, parte Nativo

10

CIn.ufpe.br

ResultSet:getXXX métodos

55

CIn.ufpe.br

Aperfeiçoando ResultSet

...

stmt = con.createStatement(

ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

stmt.setFetchSize(25);

rset = stmt.executeQuery( "SELECT * FROMHOSPITAL ");

56

CIn.ufpe.br

Exemplo: Criando uma tabela

try { stmt = con.createStatement();

String sql = " CREATE TABLE HOSPITAL ( CGC NUMBER, NOME VARCHAR2(40),

NUMERO_LEITOS NUMBER) ";stmt.executeUpdate(sql);

} catch(SQLException se) { se.printStackTrace(); }catch(ClassNotFoundException ce) {

ce.printStackTrace(); }

57

CIn.ufpe.br

Exemplo: Inserindo Dados em uma Tabela

Statement stmt; //Exemplo de INSERT

try{

stmt = con.createStatement();

stmt.executeUpdate(" INSERT INTO Hospital (CGC,

nome,leitos) VALUES (1,'Restauração',1000) ");

System.out.println(" Insercao realizada ");

stmt.close();

} catch(SQLException ex2){

ex2.printStackTrace(); }

58

CIn.ufpe.br

Exemplo: Removendo Dados de uma Tabela

Statement stmt; //Exemplo de DELETE

try{

stmt = con.createStatement();

stmt.executeUpdate(" DELETE FROM Hospital WHERE

CGC=1 ");

System.out.println(" Delecao realizada ");

stmt.close();

} catch(SQLException ex2){

ex2.printStackTrace(); }

59

CIn.ufpe.br

Exemplo: Atualizando Dados em uma Tabela

Statement stmt; //Exemplo de UPDATE

try{

stmt = con.createStatement();

stmt.executeUpdate(" UPDATE Hospital SET leitos=500

WHERE CGC=1 ");

System.out.println(" Atualizacao realizada");

stmt.close();

} catch(SQLException ex2){

ex2.printStackTrace(); }

60

Page 11: Conectividade - cin.ufpe.brcin.ufpe.br/~if685/conectividade.pdf · Java API JDBC JDBC/ODBC Bridge Camada ODBC API ODBC Fonte de Dados 26 CIn.ufpe.br Tipo 2: Parte Java, parte Nativo

11

CIn.ufpe.br

Exemplo: Consultando Dados em uma Tabela

Statement stmt; //Exemplo de SELECT

try{

stmt = con.createStatement();

ResultSet rs = stmt.executeQuery("SELECT * FROM

HOSPITAL ");

while(rs.next()){

int cgc = rs.getInt(" CGC ");

String nome = rs.getString(" Nome ");

int leitos = rs.getInt(" leitos ");

61

CIn.ufpe.br

Exemplo: Consultando Dados em uma Tabela

rs.close();

stmt.close();

} catch(SQLException ex2){

ex2.printStackTrace();

}

Hospital novo = new Hospital(cgc,nome,leitos);

System.out.println(novo);

}

62

CIn.ufpe.br

java.sql.CallableStatement

Executa chamadas a stored procedures no SGBD

Reduz o tempo de execução para comandos SQL

que são executados várias vezes seguidas

Os comandos são pré-compilados pelo SGBD

java.sql.PreparedStatement

63

CIn.ufpe.br

Exemplo: PreparedStatement

Try { ....

s = “SELECT * FROM USUARIO WHERE CODIGO= ?”;

pstmt = con.prepareStatement(s);

pstmt.setInt(1,1);

pstmt.executeQuery();

....

} catch(SQLException e) { }

64

CIn.ufpe.br

Metadados

Informação a respeito de dadosDatabaseMetadataDados a respeito da base de dados como umtodo - estrutura do Banco de Dados

Fabricante e versão do SGBDDescrição de tabelas (nomes das colunas,chaves,...)

Informações a respeito de características comsuporte (ou não) pelo sistema

65

CIn.ufpe.br

DatabaseMetaData

Informações a respeito de características(Cont.)

Aproximadamente 150 métodos

Muitos deles retornam ResultSets

Não há padronização nas respostas dadaspor cada implementação

Alguns drivers não dão suporte a todos osmétodos

DatabaseMetaData dbmd = con.getMetaData();

66

Page 12: Conectividade - cin.ufpe.brcin.ufpe.br/~if685/conectividade.pdf · Java API JDBC JDBC/ODBC Bridge Camada ODBC API ODBC Fonte de Dados 26 CIn.ufpe.br Tipo 2: Parte Java, parte Nativo

12

CIn.ufpe.br

ResultSetMetaData

Informação a respeito de dados (Cont.)

ResultSetMetadata

Informações a respeito de tipos e propriedades

das colunas de um ResultSet

Número de colunas retornadas

Nomes e tipos de cada coluna

Gerado a partir de um ResultSet, resultado de

uma consulta

ResultSetMetaData rsmd = rs.getMetaData();

67

CIn.ufpe.br

ResultSetMetaData

Exemplo: Listar o nome de todas as colunas

for (int i=0;i<rsmd.getColumnCount();i++){

nome=rsmd.getColumnName(i);

System.out.println(nome);

}

68

CIn.ufpe.br

Atualizações em LotePermite que várias operações de update possamser submetidas juntas para processamento doSGBD, ao invés de sozinhas

Exemplo

try { con.setAutoCommit( false );

stmt.clearBatch();

stmt.addBatch( sUpdate1 );

stmt.addBatch( sUpdate2 );

stmt.addBatch( sUpdate3 );

int[ ] conta = stmt.executeBatch();

} catch(SQLException e) {}

69

CIn.ufpe.br

Tipos de Dados Avançados(SQL3)

Large Objects (LOB)

Binary Large Objects (BLOB)

Character Large Objects (CLOB)

Locator

Interface para associar um evento SAX com alocalização de um documento (Processamento deXML)

70

CIn.ufpe.br

java.sql.Blob

Assinatura dos MétodosInputStream getBinaryStream( ) throwsSQLException

byte[ ] getBytes(long pos, int length) throwsSQLExceptionlong length( ) throws SQLException....

71

CIn.ufpe.br

Exemplo: Blob

try {PreparedStatement getFotoStmt = con.prepareStatement("SELECT IMAGEM FROM IMAGENS WHERE CODIGO = ?");getFotoStmt.setInt(1, 1);rs = getFotoStmt.executeQuery();if (rs.next()) {

fotoBlob = rs.getBlob(“IMAGEM");byte teste[ ] = fotoBlob.getBytes(1,

(int)fotoBlob.length());if (teste != null) {result =

(Image)Toolkit.getDefaultToolkit().createImage(teste); }} else System.out.println(“erro”);} catch (SQLException ex) { ex.printStackTrace();}

72

Page 13: Conectividade - cin.ufpe.brcin.ufpe.br/~if685/conectividade.pdf · Java API JDBC JDBC/ODBC Bridge Camada ODBC API ODBC Fonte de Dados 26 CIn.ufpe.br Tipo 2: Parte Java, parte Nativo

13

CIn.ufpe.br

java.sql.Clob

Assinatura dos MétodosInputStream getAsciiStream( ) throwsSQLException

Reader getCharacterStream( ) throwsSQLExceptionString getSubString(long pos, int length) throwsSQLException...

73

CIn.ufpe.br

Transações

Preservam a consistência dos dados do SGBDPropriedades das transações (ACID):

Atomicidade

ConsistênciaIsolamentoDurabilidade

74

CIn.ufpe.br

Implementando Transações

Propriedades auto-commit de Connectiontrue - realiza commit após cada operaçãoexecutada pelo Statement sercompletada(default)

false - não realiza commit automaticamente

75

CIn.ufpe.br

Implementando Transações

MétodossetAutoCommit(boolean autoCommit)

Define o modo de commit

commit( )Confirma a transação

rollback( )Cancela a transação

76

CIn.ufpe.br

Exemplo de Transaçãocom JDBC

Try { ...con.setAutoCommit(false);stmt = con.createStatement();String sql1 = “INSERT INTO HOSPITAL (5,’Neuro’,800)”;String sql2 = “INSERT INTO USUARIO (6,’Hope’,750)”;stmt.executeUpdate(sql1);stmt.executeUpdate(sql2);con.commit();

} catch(SQLException se) {try { con.rollBack(); }catch(SQLException e){e.printStackTrace(); }e.printStackTrace();

}

77

CIn.ufpe.br

Transações - Isolamento

Níveis de isolamentoREAD COMMITTED

Nível default de alguns SGBD

Modificações realizadas por outras transaçõessó se tornam visíveis depois do commitDuas transações concorrentes podemmodificar o mesmo registro

78

Page 14: Conectividade - cin.ufpe.brcin.ufpe.br/~if685/conectividade.pdf · Java API JDBC JDBC/ODBC Bridge Camada ODBC API ODBC Fonte de Dados 26 CIn.ufpe.br Tipo 2: Parte Java, parte Nativo

14

CIn.ufpe.br

READ COMMITTED

Exemploa=0;

Update t set a=1;

commit

select a from t1; Retorna 0

T1 T2 comentário

select a from t1; Retorna 1

update t set a=2;

Select a from t1; Retorna 1

Commit

Select a from t1; Retorna 2

79

CIn.ufpe.br

Transações - Isolamento

Níveis de isolamento (Cont.)SERIALIZABLE

Nível mais estrito de isolamento

Menor nível de concorrênciaModificações realizadas por outrastransações não são visíveis para atransação correnteA transação corrente sempre se tem avisão do banco do início da transação

Duas transações concorrentes não podemmodificar o mesmo registro

80

CIn.ufpe.br

SERIALIZABLE

Exemploa=0;

Update t set a=1;

select a from t1; Retorna 0

commit

select a from t1; Retorna 0

Begin work Inicia nova transação

Update t set a=3 Lock exclusivo em a

update t set a=2; T2 trava esperando o lock

commit Rollback automático em T2

T1 T2 Comentário

81

CIn.ufpe.br

Transações e JDBC

con.setAutoCommit(false); // Inicia a transação

con.setTransactionIsolation(con.TRANSACTION_READ_COMMITTED);

(…)

con.commit();

(…)

}catch(SQLException e){

con.rollback(); // SEMPRE termine a transação!

}

82


Recommended