JDBC - Tipos de Dados

O driver JDBC converte o tipo de dados Java no tipo JDBC apropriado, antes de enviá-lo ao banco de dados. Ele usa um mapeamento padrão para a maioria dos tipos de dados. Por exemplo, um Java int é convertido em SQL INTEGER. Os mapeamentos padrão foram criados para fornecer consistência entre os drivers.

A tabela a seguir resume o tipo de dados JDBC padrão para o qual o tipo de dados Java é convertido, quando você chama o método setXXX () do objeto PreparedStatement ou CallableStatement ou o método ResultSet.updateXXX ().

SQL JDBC / Java setXXX updateXXX
VARCHAR java.lang.String setString updateString
CARACTERES java.lang.String setString updateString
LONGVARCHAR java.lang.String setString updateString
MORDEU boleano setBoolean updateBoolean
NUMÉRICO java.math.BigDecimal setBigDecimal updateBigDecimal
TINYINT byte setByte updateByte
SMALLINT baixo setShort updateShort
INTEIRO int setInt updateInt
BIGINT grandes setLong updateLong
REAL flutuador setFloat updateFloat
FLUTUADOR flutuador setFloat updateFloat
EM DOBRO em dobro setDouble updateDouble
VARBINÁRIO byte [] setBytes updateBytes
BINÁRIO byte [] setBytes updateBytes
ENCONTRO java.sql.Date setDate data de atualização
TEMPO java.sql.Time definir tempo tempo de atualização
TIMESTAMP java.sql.Timestamp setTimestamp updateTimestamp
CLOB java.sql.Clob setClob updateClob
BLOB java.sql.Blob setBlob updateBlob
ARRAY java.sql.Array setARRAY updateARRAY
REF java.sql.Ref SetRef updateRef
ESTRUTURA java.sql.Struct SetStruct updateStruct

O JDBC 3.0 aprimorou o suporte para os tipos de dados BLOB, CLOB, ARRAY e REF. O objeto ResultSet agora possui os métodos updateBLOB (), updateCLOB (), updateArray () e updateRef () que permitem que você manipule diretamente os respectivos dados no servidor.

Os métodos setXXX () e updateXXX () permitem converter tipos específicos de Java em tipos de dados JDBC específicos. Os métodos, setObject () e updateObject (), permitem mapear quase qualquer tipo de Java para um tipo de dados JDBC.

O objeto ResultSet fornece o método getXXX () correspondente para cada tipo de dados para recuperar o valor da coluna. Cada método pode ser usado com o nome da coluna ou por sua posição ordinal.

SQL JDBC / Java setXXX getXXX
VARCHAR java.lang.String setString getString
CARACTERES java.lang.String setString getString
LONGVARCHAR java.lang.String setString getString
MORDEU boleano setBoolean getBoolean
NUMÉRICO java.math.BigDecimal setBigDecimal getBigDecimal
TINYINT byte setByte getByte
SMALLINT baixo setShort getShort
INTEIRO int setInt getInt
BIGINT grandes setLong getLong
REAL flutuador setFloat getFloat
FLUTUADOR flutuador setFloat getFloat
EM DOBRO em dobro setDouble getDouble
VARBINÁRIO byte [] setBytes getBytes
BINÁRIO byte [] setBytes getBytes
ENCONTRO java.sql.Date setDate getDate
TEMPO java.sql.Time definir tempo consiga tempo
TIMESTAMP java.sql.Timestamp setTimestamp getTimestamp
CLOB java.sql.Clob setClob getClob
BLOB java.sql.Blob setBlob getBlob
ARRAY java.sql.Array setARRAY getARRAY
REF java.sql.Ref SetRef getRef
ESTRUTURA java.sql.Struct SetStruct getStruct

Tipos de dados de data e hora

A classe java.sql.Date mapeia para o tipo SQL DATE e as classes java.sql.Time e java.sql.Timestamp mapeiam para os tipos de dados SQL TIME e SQL TIMESTAMP, respectivamente.

O exemplo a seguir mostra como as classes Date e Time formatam os valores de data e hora Java padrão para corresponder aos requisitos de tipo de dados SQL.

import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.*;

public class SqlDateTime {
   public static void main(String[] args) {
      //Get standard date and time
      java.util.Date javaDate = new java.util.Date();
      long javaTime = javaDate.getTime();
      System.out.println("The Java Date is:" + 
             javaDate.toString());

      //Get and display SQL DATE
      java.sql.Date sqlDate = new java.sql.Date(javaTime);
      System.out.println("The SQL DATE is: " + 
             sqlDate.toString());

      //Get and display SQL TIME
      java.sql.Time sqlTime = new java.sql.Time(javaTime);
      System.out.println("The SQL TIME is: " + 
             sqlTime.toString());
      //Get and display SQL TIMESTAMP
      java.sql.Timestamp sqlTimestamp =
      new java.sql.Timestamp(javaTime);
      System.out.println("The SQL TIMESTAMP is: " + 
             sqlTimestamp.toString());
     }//end main
}//end SqlDateTime

Agora vamos compilar o exemplo acima da seguinte maneira -

C:\>javac SqlDateTime.java
C:\>

Quando você corre JDBCExample, ele produz o seguinte resultado -

C:\>java SqlDateTime
The Java Date is:Tue Aug 18 13:46:02 GMT+04:00 2009
The SQL DATE is: 2009-08-18
The SQL TIME is: 13:46:02
The SQL TIMESTAMP is: 2009-08-18 13:46:02.828
C:\>

Tratamento de valores NULL

O uso de valores NULL pelo SQL e o uso de nulos pelo Java são conceitos diferentes. Portanto, para lidar com valores SQL NULL em Java, existem três táticas que você pode usar -

  • Evite usar métodos getXXX () que retornam tipos de dados primitivos.

  • Use classes de wrapper para tipos de dados primitivos e use o método wasNull () do objeto ResultSet para testar se a variável de classe de wrapper que recebeu o valor retornado pelo método getXXX () deve ser definida como nula.

  • Use tipos de dados primitivos e o método wasNull () do objeto ResultSet para testar se a variável primitiva que recebeu o valor retornado pelo método getXXX () deve ser definida como um valor aceitável que você escolheu para representar um NULL.

Aqui está um exemplo para lidar com um valor NULL -

Statement stmt = conn.createStatement( );
String sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);

int id = rs.getInt(1);
if( rs.wasNull( ) ) {
   id = 0;
}