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

Tipos de datos JDBC

El driver JDBC convierte los tipos de datos Java en tipos JDBC adecuados antes de enviarlos a la base de datos. Utiliza mapeos por defecto para la mayoría de los tipos de datos. Por ejemplo, convierte Java int a SQL INTEGER. Se crearon estos mapeos por defecto para proporcionar consistencia entre los drivers.

Cuando se llama a los métodos setXXX() de los objetos PreparedStatement o CallableStatement o a los métodos updateXXX() de ResultSet, la siguiente tabla resume la conversión de tipos de datos Java a tipos de datos JDBC por defecto.

de SQLJDBC / JavasetXXXActualizar 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 Mejora el soporte para los tipos de datos BLOB, CLOB, ARRAY y REF. El objeto ResultSet ahora tiene métodos updateBLOB(), updateCLOB(), updateArray() y updateRef(), lo que le permite operar directamente con los datos correspondientes en el servidor.

Con los métodos setXXX() y updateXXX(), se puede convertir un tipo de Java específico en un tipo de datos JDBC específico. Con los métodos setObject() y updateObject(), se puede mapear casi cualquier tipo de Java a un tipo de datos JDBC.

El objeto ResultSet proporciona métodos getXXX () correspondientes para cada tipo de datos para recuperar valores de columnas. Cada método se puede usar junto con el nombre de la columna o su posición numérica.

de 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 datos de fecha y hora

java.sql.Date映射到SQL DATE类型,而java.sql.Time和java.sql.Timestamp类分别映射到SQL TIME和SQL TIMESTAMP数据类型。

下面的示例显示Date和Time类如何格式化标准Java日期和时间值以匹配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) {
      //获取标准日期和时间
      java.util.Date javaDate = new java.util.Date();
      long javaTime = javaDate.getTime();
      System.out.println("The Java Date is:") + 
             javaDate.toString());
      //获取并显示SQL DATE
      java.sql.Date sqlDate = new java.sql.Date(javaTime);
      System.out.println("The SQL DATE is: " + 
             sqlDate.toString());
      //获取并显示SQL TIME
      java.sql.Time sqlTime = new java.sql.Time(javaTime);
      System.out.println("The SQL TIME is: " + 
             sqlTime.toString());
      //获取并显示SQL TIMESTAMP
      java.sql.Timestamp sqlTimestamp =
      new java.sql.Timestamp(javaTime);
      System.out.println("The SQL TIMESTAMP is: " + 
             sqlTimestamp.toString());
     }//结束main
}//结束SqlDateTime

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

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

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

C:\>java SqlDateTime
La fecha Java es:Mar Aug 18 13:46:02 GMT+04:00 2009
El DATE SQL es: 2009-08-18
El TIME SQL es: 13:46:02
El TIMESTAMP SQL es: 2009-08-18 13:46:02.828
C:\>

Manejo de valores NULL

El uso de NULL en SQL y el uso de null en Java son conceptos diferentes. Por lo tanto, para manejar valores NULL en Java, se pueden utilizar tres estrategias-

  • Evite usar métodos que devuelven tipos de datos originales.

  • Para probar si el valor devuelto por el método getXXX() debe establecerse en null para la variable de tipo de datos envolvente, utilice el método wasNull() del objeto ResultSet.

  • Para probar si el valor devuelto por el método getXXX() debe establecerse en un valor aceptable representativo de NULL para la variable de tipo de datos original, utilice el método wasNull() del objeto ResultSet.

Este es un ejemplo de cómo manejar 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;
}