English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tipos de Dados JDBC

The JDBC driver converts Java data types to the appropriate JDBC types before sending them to the database. It uses default mappings for most data types. For example, Java int is converted to SQL INTEGER. Default mappings were created to provide consistency between drivers.

When calling the setXXX() method of the PreparedStatement or CallableStatement object or the ResultSet.updateXXX() method, the following table summarizes the default JDBC data types converted from Java data types.

do SQLJDBC / JavasetXXXUpdate XXX
VARCHARjava.lang.StringsetStringupdateString
CHARjava.lang.StringsetStringupdateString
LONGVARCHARjava.lang.StringsetStringupdateString
BITbooleansetBooleanupdateBoolean
NUMERICjava.math.BigDecimalsetBigDecimalupdateBigDecimal
TINYINTbytesetByteupdateByte
SMALLINTshortsetShortupdateShort
INTEGERintsetIntupdateInt
BIGINTlongsetLongupdateLong
REALfloatsetFloatupdateFloat
FLOATfloatsetFloatupdateFloat
DOUBLEdoublesetDoubleupdateDouble
VARBINARYbyte[ ]setBytesupdateBytes
BINARYbyte[ ]setBytesupdateBytes
DATEjava.sql.DatesetDateupdateDate
TIMEjava.sql.TimesetTimeupdateTime
TIMESTAMPjava.sql.TimestampsetTimestampupdateTimestamp
CLOBjava.sql.ClobsetClobupdateClob
BLOBjava.sql.BlobsetBlobupdateBlob
ARRAYjava.sql.ArraysetARRAYupdateARRAY
REFjava.sql.RefSetRefupdateRef
STRUCTjava.sql.StructSetStructupdateStruct

JDBC 3.0 improved support for BLOB, CLOB, ARRAY, and REF data types. The ResultSet object now has updateBLOB(), updateCLOB(), updateArray(), and updateRef() methods, allowing you to directly operate on the corresponding data on the server.

Usando os métodos setXXX() e updateXXX(), pode-se converter tipos Java específicos para tipos de dados JDBC específicos. Usando os métodos setObject() e updateObject(), pode-se mapear quase todos os tipos Java para tipos de dados JDBC.

O objeto ResultSet fornece métodos getXXX () correspondentes para cada tipo de dados para recuperar valores de coluna. Cada método pode ser usado com o nome da coluna ou sua posição numérica.

do SQLJDBC / JavasetXXXgetXXX
VARCHARjava.lang.StringsetStringgetString
CHARjava.lang.StringsetStringgetString
LONGVARCHARjava.lang.StringsetStringgetString
BITbooleansetBooleangetBoolean
NUMERICjava.math.BigDecimalsetBigDecimalgetBigDecimal
TINYINTbytesetBytegetByte
SMALLINTshortsetShortgetShort
INTEGERintsetIntgetInt
BIGINTlongsetLonggetLong
REALfloatsetFloatgetFloat
FLOATfloatsetFloatgetFloat
DOUBLEdoublesetDoublegetDouble
VARBINARYbyte[ ]setBytesgetBytes
BINARYbyte[ ]setBytesgetBytes
DATEjava.sql.DatesetDategetDate
TIMEjava.sql.TimesetTimegetTime
TIMESTAMPjava.sql.TimestampsetTimestampgetTimestamp
CLOBjava.sql.ClobsetClobgetClob
BLOBjava.sql.BlobsetBlobgetBlob
ARRAYjava.sql.ArraysetARRAYgetARRAY
REFjava.sql.RefSetRefgetRef
STRUCTjava.sql.StructSetStructgetStruct

Tipo de dados de data e hora

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

O exemplo a seguir mostra como as classes Date e Time formatam valores de data e hora padrão Java para atender aos requisitos do 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) {
      //Obter a data e hora padrão
      java.util.Date javaDate = new java.util.Date();
      long javaTime = javaDate.getTime();
      System.out.println("A DATA JAVA é:" + 
             javaDate.toString());
      //Obter e exibir o DATE SQL
      java.sql.Date sqlDate = new java.sql.Date(javaTime);
      System.out.println("O DATE SQL é: " + 
             sqlDate.toString());
      //Obter e exibir o TIME SQL
      java.sql.Time sqlTime = new java.sql.Time(javaTime);
      System.out.println("O TIME SQL é: " + 
             sqlTime.toString());
      //Obter e exibir o TIMESTAMP SQL
      java.sql.Timestamp sqlTimestamp =
      new java.sql.Timestamp(javaTime);
      System.out.println("O TIMESTAMP SQL é: " + 
             sqlTimestamp.toString());
     }//结束main
}//结束SqlDateTime

现在让我们编译上面的示例,如下所示:

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

运行时JDBCExample,它将产生以下结果-

C:\>java SqlDateTime
A Data Java é:Tue Aug 18 13:46:02 GMT+04:00 2009
O DATE SQL é: 2009-08-18
O TIME SQL é: 13:46:02
O TIMESTAMP SQL é: 2009-08-18 13:46:02.828
C:\>

Lidar com Valores NULL

O uso de NULL no SQL e no Java é um conceito diferente. Portanto, para lidar com valores NULL no Java, você pode usar três estratégias-

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

  • Use classes wrapping para tipos de dados primitivos e o método wasNull() do objeto ResultSet para testar se a variável wrapping retornada pelo método getXXX() deve ser configurada como null.

  • Use tipos de dados primitivos e o método wasNull() do objeto ResultSet para testar se a variável original retornada pelo método getXXX() deve ser configurada com o valor aceitável representativo de NULL que você escolheu.

Este é um exemplo de como lidar com valores 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;
}