Post on 21-Nov-2018
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
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.)
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 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.)
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
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
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
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
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
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