SQLJ: uma alternativa de alto n - PowerPoint PPT Presentation

About This Presentation
Title:

SQLJ: uma alternativa de alto n

Description:

SQLJ: uma alternativa de alto n vel a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor: Cl udio de Souza Baptista – PowerPoint PPT presentation

Number of Views:121
Avg rating:3.0/5.0
Slides: 58
Provided by: Dami68
Category:
Tags: sqlj | alternativa | alto | uma

less

Transcript and Presenter's Notes

Title: SQLJ: uma alternativa de alto n


1
SQLJ uma alternativa de alto nível a JDBC
  • Universidade Federal de Campina Grande
  • Disciplina Banco de Dados I
  • Professor Cláudio de Souza Baptista
  • Estagiário Elvis Rodrigues da Silva

2
Roteiro
  • Introdução
  • Sintaxe Inicial
  • Comandos avançados
  • Requisitos
  • Referências

3
Introdução (1 de 5)
  • SQLJ é uma tecnologia que permite a um programa
    Java acessar um banco de dados utilizando
    statements SQL embutidos
  • Arquivo fonte termina com .sqlj
  • Manipulações SQLJ
  • Meta informações Create, Alter, Drop
  • Dados Select, Insert, Update, Open, Fetch
  • Controle de Transações Commit, Rollback

4
Introdução (2 de 5)
  • SQLJ não pode ser compilado diretamente pelo
    compilador Java
  • Solução usar um tradutor
  • SQLJ Translator

5
Introdução (3 de 5)
  • O tradutor verifica erros de sintaxe e semânticos
    na instrução SQL em tempo de tradução
  • Nomes incorretos
  • Checagem de tipos
  • Verifica se o comando SQL está de acordo com o
    Banco de Dados
  • Etc.

6
Introdução (4 de 5)
  • A IDE Oracle JDeveloper reconhece a sintaxe de
    SQLJ para o banco de dados Oracle, mas é possível
    utilizar outros compiladores
  • O IBM Websphere também possui compatibilidade com
    SQLJ para o banco de dados IBM DB2

7
Introdução (5 de 5)
  • Vantagens de SQLJ sobre JDBC (comandos estáticos)
  • Código-fonte reduzido
  • Checagem de tipos SQL via conexão
  • Associação de variáveis em um único comando
  • Checagem de tipos de parâmetros e retorno antes
    da execução
  • Desvantagens
  • Um passo a mais no processamento tradução de
    sqlj para java

8
Sintaxe Inicial Declarações (1 de 3)
  • Declarações SQLJ
  • sqlltcomando SQLgt
  • Regras pra declarações SQLJ
  • SQLJ declaration // OK (top level scope)
  • class Outer
  • SQLJ declaration // OK (class level scope)
  • class Inner
  • SQLJ declaration // OK (nested class
    scope)
  • void func()
  • SQLJ declaration / OK in JDK 1.2.x
    ILLEGAL in JDK 1.1.x (method
    block)/

9
  • Exemplo

10
Sintaxe Inicial Declarações (3 de 3)
  • Existem 2 tipos de declarações SQLJ
  • Iterator
  • Context
  • Iterator
  • Declarações que definem classes iterator
  • Usado para receber os resultados de consultas
  • Context
  • Usado para criar uma conexão ao Banco de Dados

11
Sintaxe Inicial SQLJ Namespace
  • Todas as restrições de nome em Java são aplicadas
    aqui
  • Evitar usar as palavras reservadas, nome de
    classes e colunas em iterator
  • iterator
  • context
  • with

12
Sintaxe Inicial Iterator (1 de 8)
  • Declaração
  • Modifiers
  • publics, static, etc
  • Existem 2 tipos de iterator
  • named iterators
  • positional iterators

13
Sintaxe Inicial Iterator (2 de 8)
  • named iterators
  • positional iterators

14
Sintaxe Inicial Iterator (3 de 8)
  • Exemplo named iterators
  • sql iterator MyCheckedIter (String ename, double
    sal)
  • ...
  • MyCheckedIter iter
  • sql iter SELECT ename, sal FROM Employee
  • while (iter.next())
  • System.out.println(iter.ename())
  • System.out.println(iter.sal())

15
Sintaxe Inicial Iterator (4 de 8)
  • Obtendo os elementos de um Positional iterators
  • FETCH INTO seguido por endFetch()
  • O FETCH INTO chama implicitamente o método next()

16
  • Exemplo de positional iterators

17
Sintaxe Inicial Iterator (6 de 8)
  • Iterator e ResultSet podem existir dentro de
    outro Iterator em Oracle SQLJ
  • Exemplos
  • CREATE TABLE DEPT (
  • DEPTNO NUMBER(2),
  • DNAME VARCHAR2(14)
  • )
  • CREATE TABLE EMP (
  • EMPNO NUMBER(4),
  • ENAME VARCHAR2(10),
  • SAL NUMBER(7,2),
  • DEPTNO NUMBER(2)
  • )

18
Sintaxe Inicial Iterator (7 de 8)
19
Sintaxe Inicial Iterator (8 de 8)
  • Outro exemplo
  • Declaração
  • Execução

20
Sintaxe Inicial Connection (1 de 7)
  • Existem várias formas de criar uma conexão com o
    Banco de Dados
  • Criando um contexto Default
  • DefaultContext defctx new DefaultContext
    ("jdbcoraclethin_at_localhost1521orcl",
    "scott", "tiger", false)
  • Através da declaração SQLJ

21
Sintaxe Inicial Connection (2 de 7)
  • Exemplo
  • sql context MyContext
  • ...
  • MyContext myContext new MyContext("jdbcoraclet
    hin_at_localhost1521dbhome", scott", "tiger ",
    false)

22
Sintaxe Inicial Connection (3 de 7)
  • Simples conexão usando connect() da classe
    oracle.sqlj.runtime.Oracle
  • Oracle.connect(MyClass.class, "connect.properties"
    )
  • Oracle.connect("jdbcoraclethin_at_localhost1521
  • orcl", "scott", "tiger")
  • A função connect() simplifica o processo de
    criação e usa uma instância da classe
    DefaultContext

23
Sintaxe Inicial Connection (4 de 7)
  • Formato do arquivo properties

sqlj.urljdbcoraclethin_at_localhost1521dbhome s
qlj.userscott sqlj.passwordtiger
24
Sintaxe Inicial Connection (5 de 7)
  • Multiplas conexões
  • DefaultContext ctx1 Oracle.getConnection (
  • "jdbcoraclethin_at_localhost11521orcl1",
    "scott", "tiger")
  • DefaultContext ctx2 Oracle.getConnection (
  • "jdbcoraclethin_at_localhost21521orcl2",
    "bill", "lion")
  • sql ctx1 SQL operation
  • ...
  • sql ctx2 SQL operation

25
Sintaxe Inicial Connection (6 de 7)
  • Se uma conexão é usada várias vezes podemos
    fazer
  • DefaultContext.setDefaultContext(ctx1)
  • sql SQL operation
  • sql SQL operation
  • sql SQL operation
  • ...
  • DefaultContext.setDefaultContext(ctx2)
  • sql SQL operation
  • sql SQL operation
  • sql SQL operation

26
Sintaxe Inicial Connection (7 de 7)
  • Fechando a conexão
  • Há um commit implícito quando a conexão é
    fechada
  • ...
  • finally
  • try
  • ctx.close()
  • //ou
  • Oracle.close()
  • catch(SQLException ex)
  • ...
  • ...

27
Sintaxe Inicial Interfaces (1 de 3)
  • Iterator e Context são transformados em classes
    java depois de traduzidos
  • sql iterator MyCheckedIter (String ITEM_NAME,
    Double COST)
  • class MyCheckedIter extends sqlj.runtime.ref.Resul
    tSetIterImpl
  • implements sqlj.runtime.NamedIterator
  • public String ITEM_NAME()
  • public Double COST()

tradutor
28
Sintaxe Inicial Interfaces (2 de 3)
  • Quando se declara um iterator ou context,
    pode-se especificar uma ou mais interfaces
  • sql ltmodifiersgt context context_classname
    implements intfc1,..., intfcN
  • Exemplo
  • sql iterator EmpIter implements
    mypackage.EmpIterIntfc (String emame, int empno,
    float sal)

29
  • Exemplo evitar acesso a uma coluna da tabela

Erro de compilação
30
Sintaxe Inicial SubClasses
  • Exemplo
  • // Declarando um iterator
  • sql public static iterator EmpIter(int empno,
    String ename)
  • ...
  • //criando a subclasse
  • public static class EmpColl extends EmpIter
    ...
  • ...
  • //usando a subclasse
  • EmpColl ec
  • sql ec select ename, empno from emp

31
Sintaxe Inicial Hosts (1 de 4)
  • Usados para troca de valores entre variáveis Java
    e SQLJ
  • Podem ser referenciados dentro de uma instrução
    SQLJ
  • SQLJ fica responsável em devolver os valores
  • O tipo da variável host é convertida para o tipo
    compatível com a coluna

32
Sintaxe Inicial Hosts (2 de 4)
  • Sintaxe
  • mode variavel_host
  • Onde mode pode ser
  • IN, OUT e INOUT
  • O default é OUT se a variável é parte de uma
    lista INTO ou em um statement SET e é IN caso
    contrário

33
Sintaxe Inicial Hosts (3 de 4)
  • Exemplos
  • String nomeint mat 5sql SELECT aluno
    INTO nome FROM cadastro WHERE matricula
    mat

34
Sintaxe Inicial Hosts (4 de 4)
  • Outro exemplo
  • float balance 12500.0
  • float minPmtRatio 0.05
  • ...
  • sql UPDATE creditacct SET minPayment
    (balance minPmtRatio) WHERE acctnum 537845

35
Comandos Avançados Scrollable Iterators (1 de 8)
  • Iterator tem apenas um único método para navegar
  • next()
  • Scrollable Iterators permite o usuário dizer o
    sentido da iteração

36
Comandos Avançados Scrollable Iterators (2 de 8)
  • Para um iterator tornar-se um Scrollable Iterator
    ele deve implementar a interface
    sqlj.runtime.Scrollable
  • Declaração
  • sql public static MyScrIter implements
    sqlj.runtime.Scrollable (String ename, int empno)

37
Comandos Avançados Scrollable Iterators (3 de 8)
  • Scrollable Interface
  • setFetchDirection(int)
  • FETCH_FORWARD (default)
  • FETCH_REVERSE
  • getFetchDirection()
  • boolean isBeforeFirst()
  • boolean isFirst()
  • boolean isLast()
  • boolean isAfterLast()

38
Comandos Avançados Scrollable Iterators (4 de 8)
  • Métodos de navegação
  • boolean previous()
  • boolean first()
  • boolean last()
  • boolean absolute(int)
  • boolean relative(int)
  • void beforeFirst()
  • void afterLast()

39
Comandos Avançados Scrollable Iterators (5 de 8)
  • Exemplo

...
40
Comandos Avançados Scrollable Iterators (6 de 8)
  • Scrollable Positional Iterators
  • O comando
  • sql FETCH iter INTO x, y, z
  • É uma abreviação para
  • sql FETCH NEXT FROM iter INTO x, y, z

41
Comandos Avançados Scrollable Iterators (7 de 8)
  • O comando
  • sql FETCH NEXT FROM iter INTO x, y, z
  • sugere um padrão para movimentos alternativos
  • sql FETCH PREVIOUS FROM iter INTO x, y, z
  • sql FETCH FIRST FROM iter INTO x, y, z
  • sql FETCH LAST FROM iter INTO x, y, z
  • sql FETCH ABSOLUTE n FROM iter INTO x, y,
    z
  • sql FETCH RELATIVE n FROM iter INTO x, y,
    z

42
Comandos Avançados Scrollable Iterators (8 de 8)
  • Não podemos usar constantes numéricas para
    especificar movimentos
  • sql FETCH RELATIVE 0 FROM iter INTO x, y,
    z (ERRADO)
  • sql FETCH RELATIVE (0) FROM iter INTO x,
    y, z (OK)

43
Comandos Avançados Constantes (1 de 2)
  • Declaração com constantes
  • As constantes são sempre produzidas como public
    static final

44
Comandos Avançados Constantes (2 de 2)
  • Exemplo
  • sql public iterator MyScrollableIterator
    implements sqlj.runtime.Scrollable with
    (sensitivityASENSITIVE) (String ename, int
    empno)
  • Sensitivity é um atributo da interface
    sqlj.runtime.ResultSetIterator
  • with sempre deve vir após implements

45
Comandos Avançados Transação (1 de 4)
  • Uma transação é uma seqüência de operações SQL
    que o BD trata como uma simples unidade
  • Uma transação começa depois de
  • conectar ao Banco de Dados
  • depois de um COMMIT
  • depois de um ROLLBACK

46
Comandos Avançados Transação (2 de 4)
  • Commit automático
  • Por default o auto-commit tem o valor false
  • Ativando o auto-commit
  • Oracle.getConnection (
  • "jdbcoraclethin_at_localhost1521orcl", "scott",
    "tiger", true)

47
Comandos Avançados Transação (3 de 4)
  • Mudando o auto-commit
  • ctx.getConnection().setAutoCommit(false)
  • ou
  • ctx.getConnection().setAutoCommit(true)

48
Comandos Avançados Transação (4 de 4)
  • Commit e Rollback manual
  • sql COMMIT
  • sql ROLLBACK
  • Não usar o COMMIT ou o ROLLBACK quando o
    auto-commit estiver habilitado

49
Comandos Avançados SQL Dinâmico (1 de 6)
  • O Oracle9i possui uma extensão para suportar SQL
    dinâmico em SQLJ
  • Operações que podem mudar em tempo de execução
  • Meta bind são usados para SQL dinâmico em SQLJ

50
Comandos Avançados SQL Dinâmico (2 de 6)
  • Sintaxe
  • Java_bind_expression
  • ou
  • Java_bind_expression SQL_replacement_code

Identificador ou expressão Java do tipo String
Seqüência de SQL tokens
51
Comandos Avançados SQL Dinâmico (3 de 6)
  • Exemplo 1
  • ...
  • int x 10
  • int y x 10
  • int z y 10
  • String table "new_Emp"
  • sql INSERT INTO table emp VALUES (x,
    y, z)
  • ...
  • Durante a tradução
  • INSERT INTO emp VALUES (10, 20, 30)
  • Durante a execução
  • INSERT INTO new_Emp VALUES (10, 20, 30)

52
Comandos Avançados SQL Dinâmico (4 de 6)
  • Exemplo 2
  • ...
  • String table "new_Emp"
  • String query "ename LIKE S AND salgt1000"
  • sql myIter SELECT FROM table emp2
    WHERE query enameSCOTT
  • ...
  • Durante a transação
  • SELECT FROM emp2 WHERE enameSCOTT
  • Durante a execução
  • SELECT FROM new_Emp WHERE ename LIKE S AND
    salgt1000

53
Comandos Avançados SQL Dinâmico (5 de 6)
  • Restrições
  • O Meta bind pode ser usado nos seguintes tipos
    de comandos
  • o nome de uma tabela
  • o nome de uma coluna (sem alias)
  • todo ou parte de uma cláusula WHERE
  • um valor literal ou uma expressão SQL

54
Comandos Avançados SQL Dinâmico (6 de 6)
  • Um Meta bind não pode ser a primeira expressão
    de uma operação SQL
  • Não pode conter o token INTO
  • Não pode aparecer em qualquer dos tipos de
    instruções SQL/SQLJ
  • CALL, VALUES, PSM SET, COMMIT, ROLLBACK, FETCH
    INTO ou CAST

55
Requisitos (1 de 2)
  • Para rodar um programa SQLJ precisamos de
  • Um driver JDBC
  • Um SQLJ translator
  • Oracle Home/sqlj/lib/translator.zip (ou .jar)
  • Um SQLJ runtime
  • runtime11.jar, runtime12. jar, runtime. jar,
    runtime-nonoracle. jar
  • O programa Oracle Home/bin/sqlj

56
Requisitos (2 de 2)
  • Procedimentos para rodar um programa SQLJ
  • Colocar todos os .jar necessários no classpath
  • Editar o path para a pasta Oracle Home/bin/
  • Criar o arquivo .sqlj
  • Executar o comando
  • sqlj nome_arq.sqlj
  • Executar o programa
  • Java nome_arq

57
Referências
  • Manuais da Oracle
  • http//www.oracle.com/technology/documentation/ind
    ex.html
  • Tutoriais na Web
  • http//www.onjava.com/pub/ct/46
  • http//www.javaworld.com/javaworld/jw-05-1999/jw-0
    5-sqlj_p.html
  • http//www.javaolympus.com/J2SE/Database/SQLJ/SQLJ
    .jsp
  • Leitura recomendada Java Programming with Oracle
    SQLJ, Jason Price, OReilly
Write a Comment
User Comments (0)
About PowerShow.com