bd ii (si 587) programação sql - dai.ifma.edu.br · java, c/c++/c#, cobol ou alguma outra...

44
BD II (SI 587) Programação SQL Prof. Josenildo Silva [email protected]

Upload: phamtram

Post on 21-Nov-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

BD II (SI 587)Programação SQL

Prof. Josenildo [email protected]

Estes slides são baseados nos slides disponibilizados pelos autores ELMASRI e NAVATHE, para o livro Sistemas de Banco de Dados , 6ª. Edição, Ed. Pearson Brasil

Capítulo 13. “Introdução às técnicas de programação SQL”.

Nota

SGBD

Como Acessar um BD a partir de uma Aplicação?

BD

?Aplicação

(Java, C++, PHP, VB, Delphi,COBOL, etc.)

Command Line Client

Graphic Interface

Cenário

Aplicações de banco de dadosLinguagem hospedeira

Java, C/C++/C#, COBOL ou alguma outra linguagem de programação

Sublinguagem de dadosSQL

Padrões de SQLContinuamente evoluindoCada vendedor de SGBD pode ter algumas variações do padrão

Cenário

Interface interativaComandos SQL digitados diretamente em uma interface em linha de comando.

Executar arquivo de comandos (script)@<nomearquivo>

Source <nome do arquivo> no mySQL

Cenário

Programas de aplicação ou aplicações de banco de dados

Usados como transações programadas pelos usuários finais acessando um banco de dados

Juros de poupança, Folha de pagamento, etc.

Pode ter uma interface WebConsulta de Saldo

Alternativa 1: SQL embutida

Embutir comandos SQL em uma LP geral

SQL identificada por um prefixo especial

Pré-compilador identifica os comandos de banco de dados e os extrai para o SGBD

Alternativa 2: Biblioteca de funções

Usar uma biblioteca de funções de banco de dados

Biblioteca + (API)

Projetar uma linguagem de BD nova

Duas primeiras técnicas são mais comuns

O Problema da Divergência de Impedância

Diferenças entre o modelos de BD e da LPVARCHAR, DATE, SMALLINT, etc, correspondem a quais tipos em uma dada linguagem de programação?

Vínculo para cada LP hospedeiraEspecifica, para cada tipo de atributo, os tipos de linguagem de programação compatíveis

Cursor ou variável de iteraçãoUsado para percorrer as tuplas em um resultado de consulta

Sequência de típica na programação de BD

Abrir uma conexão com o SGBD

Submeter consultas, atualizações e outros comandos do banco de dados

Terminar ou fechar a conexão

SQL embutida, SQL dinâmica e SQLJ

SQL embutidaLinguagem C (anos 90)

SQLJLinguagem Java (anos 2000)

Linguagem de programação é chamada de linguagem hospedeira

SQL EMBUTIDA

Recuperando tuplas isoladas com SQL embutida

EXEC SQLPrefixo

Pré-processador possa separar as instruções SQL embutidas do código da linguagem hospedeira

Terminam com um END-EXECOu por um ponto e vírgula (;)

Recuperando tuplas isoladas com SQL embutida (cont.)

Variáveis compartilhadasSão usadas tanto no programa C quanto nas instruções SQL embutidas

Iniciadas com um sinal de dois pontos (:) em uma instrução SQL

Recuperando tuplas isoladas com SQL embutida (cont.)

Recuperando tuplas isoladas com SQL embutida (cont.)

Conectando ao banco de dadosCONNECT TO <nome do servidor> AS <nome da conexão> AUTHORIZATION <nome de conta do usuário e senha> ;

Conexão mudadaSET CONNECTION <nome da conexão> ;

Conexão terminadaDISCONNECT <nome da conexão> ;

Recuperando tuplas isoladas com SQL embutida (cont.)

Variáveis de comunicação SQLCODE e SQLSTATE

Usadas pelo SGBD para comunicar condições de exceção ou erro

Variável SQLCODE0 = instrução foi executada com sucesso100 = não há mais dados disponíveis em um resultado de consulta< 0 = indica que houve algum erro

Recuperando tuplas isoladas com SQL embutida (cont.)

SQLSTATEString de cinco caracteres

‘00000’ = nenhum erro ou exceção

Outros valores indicam diversos erros ou exceções

Por exemplo, ‘02000’ indica ‘sem mais dados’ quando se usa SQLSTATE

Recuperando tuplas isoladas com SQL embutida (cont.)

Recuperando múltiplas tuplas com SQL embutida usando cursores

Cursor Ponteiro que aponta para uma única tupla (linha) do resultado de uma consulta

Comando OPEN CURSOR Busca o resultado da consulta e define o cursor para uma posição antes da primeira linha no resultado

Se torna a linha atual para o cursor

Recuperando múltiplas tuplas com SQL embutida usando cursores

Comandos FETCHMove o cursor para a próxima linha no resultado da consulta

Recuperando múltiplas tuplas com SQL embutida usando cursores (cont.)

Recuperando múltiplas tuplas com SQL embutida usando cursores (cont.)

FOR UPDATE OF Lista de nomes de quaisquer atributos que serão atualizados pelo programa

Orientação fetch

Acrescentar usando valor: NEXT, PRIOR, FIRST, LAST, ABSOLUTE i e RELATIVE i

SQL DINÂMICA

Especificando consultas em tempo de execução usando a SQL dinâmica

SQL dinâmicaExecuta comandos SQL em tempo de execução

Atualização dinâmica

Consulta dinâmica

Especificando consultas em tempo de execução usando a SQL dinâmica

SQLJ

SQLJ: embutindo comandos SQL em Java

Padrão adotado por diversos vendedores para embutir SQL em JavaImporta várias bibliotecas de classeContexto defaultUsa conceito de exceções para tratamento de erro

SQLException é utilizada para retornar erros ou condições de exceção

SQLJ: embutindo comandos SQL em Java (cont.)

Recuperando múltiplas tuplas em SQLJ usando iteradores

IteradorObjeto associado a uma coleção (conjunto ou multiconjunto) de registros em um resultado de consulta

Iterador nomeadoAssociado a um resultado de consulta ao listar os nomes e tipos de atributo no resultado dela

Iterador posicional Lista apenas os tipos de atributo no resultado dela

SQL/CLI

Programação de BD com chamadas de SQL/CLI

O uso de chamadas de funçãoTécnica mais dinâmica para programação de banco de dados

Biblioteca de funçõesTambém conhecida como uma interface de programação de aplicação (API)Usada para acessar o banco de dados

SQL Call Level Interface (SQL/CLI)Parte do padrão SQL

SQL/CLI: usando C como linguagem hospedeira

Registro de ambiente Registrar uma ou mais conexões de banco de dados Define informações de ambiente

Registro de conexão Registra as informações necessárias para determinada conexão de banco de dados

Registro de instrução Registra as informações necessárias para uma instrução SQL

SQL/CLI: usando C como linguagem hospedeira (cont.)

Registro de descrição Registra as informações sobre tuplas ou parâmetros

Identificador do registroUma variável de ponteiro C torna o registro acessível ao programa

BIBLIOTECA JDBC

JDBC: chamadas de função SQL para programa em Java

JDBCBibliotecas de Java

Um único programa Java pode conectar a vários bancos de dados diferentes, chamados fontes de dados acessadas pelo programa Java

Class.forName(“oracle.jdbc.driver.OracleDriver”)

Carregar um driver JDBC de maneira explícita

JDBC: classes principais

Classe Connection

Classe Statement Subclasses: PreparedStatement e CallableStatement

Classe ResultSetResultado da consulta é retornado

Comparando as técnicas

Técnica da SQL embutidaTexto da consulta verifica erros de sintaxe e valida contra o esquema do banco de dados em tempo de compilação

Para aplicações complexas em que as consultas precisam ser geradas em tempo de execução a técnica de chamada de função será mais adequada

Comparando as técnicas (cont.)

Técnica da biblioteca de chamadas de função

Mais flexibilidade

Programação mais complexa

Nenhuma verificação de sintaxe pode ser feita em tempo de compilação

Resumo

Técnicas para acesso a banco de dados a partir de uma aplicação:

SQL embutida

SQLJ

Padrão SQL/CLI

Biblioteca de classes JDBC