Tipo de Dados SQL Tipos de Dados SQL 1 SQL by uzd19483

VIEWS: 0 PAGES: 8

									                  Tipos de Dados SQL
1. SQL-92


      O padrão SQL-92 define um conjunto de tipos de dados que
não são mapeados bijetivamente com os tipos de dados Java. As
aplicações que movem dados de SQL para Java e vice versa devem
levar em consideração a maneira pela qual JDBC trata esse
mapeamento. É necessário conhecer como um tipo de dados Java
recebe uma representação SQL e vice versa.
      Quando se recuperar dados de uma fonte de dados JDBC, a
implementação do ResultSet fará o mapeamento dos tipos de dados
SQL em tipos de dados Java. A tabela que se segue exibe uma
correspondência entre tipos de dados SQL e tipos de dados Java.




                                                              1
Tipo de Dados SQL     Tipo de Dados Java
CHAR                  String
VARCHAR               String
LONGVARCHAR           String
NUMERIC               Java.math.BigDecimal
DECIMAL               Java.math.BigDecimal
BIT                   boolean
TINYINT               byte
SMALLINT              short
INTEGER               int
BIGINT                long
REAL                  float
FLOAT                 double
DOUBLE                double
BINARY                byte[]
VARBINARY             byte[]
LONGVARBINARY         byte[]
DATE                  java.sql.Date
TIME                  java.sql.Time
TIMESTAMP             java.sql.Timestamp
      De maneira oposta a correspondência entre tipos de dados Java
e tipos de dados SQL pode ser vislumbrada abaixo.




                                                                  2
Tipo de Dados Java     Tipo de Dados SQL
String                 VARCHAR, LONGVARCHAR
Java.math.BigDecimal   NUMERIC
boolean                BIT
byte                   TINYINT
short                  SMALLINT
int                    INTEGER
long                   BIGINT
float                  REAL
double                 DOUBLE
byte[]                 VARBINARY, LONGVARBINARY
java.sql.Date          DATE
java.sql.Time          TIME
java.sql.Timestamp     TIMESTAMP

      Os tipos de dados iniciados por “Java.” Não são tipos
elementares de dados mas classes que possuem métodos de tradução
dos dados para formatos utilizáveis. Estas classes são necessárias
porque não existe nenhum tipo primitivo de dados que seja mapeado
diretamente em um tipo SQL correspondente. Deve-se criar essas
classes sempre que for necessário armazenar dados de um banco de
Dados




                                                                 3
2. Novos tipos SQL
2.1 Nomenclatura
     A próxima versão do padrão ANSI/ISO SQL é chamada de
SQL3 e está em fase de apreciação. A API JDBC 2.0 incorpora um
modelo dos tipos de dados SQL3 que inclui apenas as propriedades
essenciais à troca de dados entre as aplicações e os bancos de dados.
A especificação SQL3 prevê a existência dos seguintes tipos de
dados:

   Tipos de dados herdados da SQL2
        Char
        Float
        Date
        Etc.
   Novos tipos
        BLOB
        CLOB
   Tipos estruturados tais como
        CREATE TYPE PONTO_DE_PLANO (X FLOAT, Y
    FLOAT)
   Tipos distintos baseados na representação de primitivos, tais
    como
        CREATE TYPE DINHEIRO AS NUMERIC (10,2)
   Tipos construídos em função dos primitivos tais como
        REF (tipo estruturado)
        Tipo base ARRAY [m]
   Tipos LOCATOR tais como
        LOCATOR (tipo estruturado)
        LOCATOR (array)
        LOCATOR (blob)
        LOCATOR (clob)



                                                                    4
      Um valor REF é persistente e denota uma instância de um tipo
estruturado que reside no banco de dados. Um LOCATOR existe
apenas no ambiente do cliente e é um ponteiro lógico para dados que
residem no servidor de BD. Um LOCATOR refere-se a dados muito
grandes para se materializarem no cliente, tais como áudio e vídeo.
Existem operadores definidos ao nível de SQL que recuperam
aleatoriamente partes dos dados denotados pelo LOCATOR.


2.2 Blobs e clobs

      Binary large objects (blobs) e Character large objects
(clobs) são tipos de dados tratados de maneira semelhante aos tipos
embutidos JDBC. Por default os objetos blob e clob só se mantém
validos durante a transação que os criou. Contudo JDBC pode
alterar isso, para a duração da sessão, por exemplo.

             Blob blob = rs.getBlob()1 ; // coluna 1
             Clob clob = rs.getClob()1 ; // coluna 2
2.3 Arrays

    A recuperação de “arrays” pode ser feita pelo método
getArray() e o armazenamento pode ser feito por
PreparedStatement.setObject().

             Array a = rs.getArray(1); // coluna 1

2.4 REF

    Uma referência SQL pode ser recuperada pelo método
getRef() das interfaces ResulSet e CallableStatement. O
armazenamento pode ser feito por PreparedStatement.setRef().

             Ref ref = rs.getRef(1);


                                                                  5
2.5 Tipos distintos

      Um dado SQL do tipo DISTINCT, por default pode ser
recuperado por qualquer método getXXX() do tipo subjacente ou
original. Se, por exemplo, tivesse ocorrido a definição do tipo
DINHEIRO que se segue, sua recuperação seria a indicada e o
armazenamento seria da forma PreparedStatement.setXXX() ou
PreparedStatement.setBigDecimal().
      .
             CREATE TYPE DINHEIRO AS NUMERIC (10,2)

            Java.math.BigDecimal bd = rs.getBigDecimal(1);

2.6 Tipos estruturados

     O valor de uma dado SQL do tipo estruturado sempre é
recuperado pelo método getObject(), que, por default, reorna um
balor do tipo Struct para um tipo estruturado. O armazenamento
pode ser feito por PreparedStatement.Object

            Struct struct = (Struct)rs.getObject(1);




                                                              6
3. Personalização de tipos SQL
3.1 O mapeamento de tipos

      Uma instância de java.util.Map é usada para manter um
mapeamento personalizado entre tipos estruturados SQL definidos
pelo usuário e tipos e classes Java. Este objeto (instância) é chamado
type-map. Um objeto type-map implementa uma função dos nomes
SQL definidos pelo usuário em objetos do tipo java.lang.Class. Um
objeto type-map determina a classe da qual construir um objeto para
conter dados de um tipo SQL definido pelo usuário. Cada conexão
JDBC possui um objeto type-map associado. O objeto type-map
contém mapeamento de tipos para a tradução de dados de tipos SQL
definidos pelo usuário em operações nessa conexão. São fornecidos
métodos para obter e estabelecer um type-map de conexão. Por
exemplo

             java.util.Map map = con.getTypeMap();
             con.setTypeMap (map);

     O primeiro comando recupera um objeto type-map e o segundo
comando estabelece um novo mapeamento. Se um tipo de
mapeamento para uma conexão não for inicializado pala aplicação
JDBC então o mapeamento default é usado nas operações da
conexão

3.2 Convenções de classe Java

      Uma classe Java que aparece em um type-map personalizado
deve implementar uma nova interface java.sql.SQLData. A
interface SQLData contém métodos que convertem instâncias de
tipos SQL definidos pelo usuário em instâncias de classes Java e
vice     versa   tais        como    SQLData.readSQL()         e
SQLDtat.writeSQL().


                                                                     7
3.3 “Streams” de dados SQL

     Quando dados de tipos SQL distintos e estruturados são
recuperados de um BD, eles retornam em um “stream”
implementando a interface SQLInput. Considere-se um objeto
SQLData contendo três campos persistentes, um String s, um Bolb
blob e um Empregado emp.

            this.str = sqlin.readString();
            this.blob = sqlin.readBlob();
            this.emp = (Empregado)sqlin.readObject();
e ainda
            sqlout.writeString(this.str);
            sqlout.writeBlob(this.blob);
            sqlout.writeObject(this.emp);




                                                              8

								
To top