BD II (SI 587) Programação SQL Prof. Josenildo Silva jcsilva@ifma.edu.br
Nota 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.
Como Acessar um BD a partir de uma Aplicação? Graphic Interface Command Line Client? Aplicação (Java, C++, PHP, VB, Delphi,COBOL, etc.) SGBD BD
Cenário Aplicações de banco de dados Linguagem hospedeira Java, C/C++/C#, COBOL ou alguma outra linguagem de programação Sublinguagem de dados SQL Padrões de SQL Continuamente evoluindo Cada vendedor de SGBD pode ter algumas variações do padrão
Cenário Interface interativa Comandos 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 Web Consulta 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 LP VARCHAR, DATE, SMALLINT, etc, correspondem a quais tipos em uma dada linguagem de programação? Vínculo para cada LP hospedeira Especifica, para cada tipo de atributo, os tipos de linguagem de programação compatíveis Cursor ou variável de iteração Usado 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 embutida Linguagem C (anos 90) SQLJ Linguagem Java (anos 2000) Linguagem de programação é chamada de linguagem hospedeira
SQL EMBUTIDA
Recuperando tuplas isoladas com SQL embutida EXEC SQL Prefixo Pré-processador possa separar as instruções SQL embutidas do código da linguagem hospedeira Terminam com um END-EXEC Ou por um ponto e vírgula (;)
Recuperando tuplas isoladas com SQL embutida (cont.) Variáveis compartilhadas Sã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 dados CONNECT TO <nome do servidor> AS <nome da conexão> AUTHORIZATION <nome de conta do usuário e senha> ; Conexão mudada SET CONNECTION <nome da conexão> ; Conexão terminada DISCONNECT <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 SQLCODE 0 = instrução foi executada com sucesso 100 = 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.) SQLSTATE String 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 FETCH Move 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âmica Executa 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 Java Importa várias bibliotecas de classe Contexto default Usa 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 Iterador Objeto associado a uma coleção (conjunto ou multiconjunto) de registros em um resultado de consulta Iterador nomeado Associado 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ção Técnica mais dinâmica para programação de banco de dados Biblioteca de funções També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 registro Uma variável de ponteiro C torna o registro acessível ao programa
BIBLIOTECA JDBC
JDBC: chamadas de função SQL para programa em Java JDBC Bibliotecas 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.oracl edriver ) Carregar um driver JDBC de maneira explícita
JDBC: classes principais Classe Connection Classe Statement Subclasses: PreparedStatement e CallableStatement Classe ResultSet Resultado da consulta é retornado
Comparando as técnicas Técnica da SQL embutida Texto 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