JDBC: tipos de datos

El controlador JDBC convierte el tipo de datos Java al tipo JDBC apropiado, antes de enviarlo a la base de datos. Utiliza una asignación predeterminada para la mayoría de los tipos de datos. Por ejemplo, un int de Java se convierte en un INTEGER de SQL. Se crearon asignaciones predeterminadas para proporcionar coherencia entre los controladores.

La siguiente tabla resume el tipo de datos JDBC predeterminado al que se convierte el tipo de datos Java cuando se llama al método setXXX () del objeto PreparedStatement o CallableStatement o al método ResultSet.updateXXX ().

SQL JDBC / Java setXXX updateXXX
VARCHAR java.lang.String setString updateString
CARBONIZARSE java.lang.String setString updateString
LONGVARCHAR java.lang.String setString updateString
POCO booleano setBoolean updateBoolean
NUMÉRICO java.math.BigDecimal setBigDecimal updateBigDecimal
TINYINT byte setByte updateByte
PEQUEÑO corto setShort updateShort
ENTERO En t setInt updateInt
EMPEZANDO largo setLong updateLong
REAL flotador setFloat updateFloat
FLOTADOR flotador setFloat updateFloat
DOBLE doble setDouble updateDouble
VARBINARIO byte [] setBytes updateBytes
BINARIO byte [] setBytes updateBytes
FECHA java.sql.Date define la fecha fecha de actualización
HORA java.sql.Time fijar tiempo tiempo de actualizacion
TIMESTAMP java.sql.Timestamp setTimestamp updateTimestamp
CLOB java.sql.Clob setClob updateClob
GOTA java.sql.Blob setBlob updateBlob
FORMACIÓN java.sql.Array setARRAY updateARRAY
ÁRBITRO java.sql.Ref SetRef updateRef
ESTRUCTURA java.sql.Struct SetStruct updateStruct

JDBC 3.0 tiene soporte mejorado para los tipos de datos BLOB, CLOB, ARRAY y REF. El objeto ResultSet ahora tiene métodos updateBLOB (), updateCLOB (), updateArray () y updateRef () que le permiten manipular directamente los datos respectivos en el servidor.

Los métodos setXXX () y updateXXX () le permiten convertir tipos específicos de Java en tipos de datos JDBC específicos. Los métodos setObject () y updateObject () le permiten mapear casi cualquier tipo de Java a un tipo de datos JDBC.

El objeto ResultSet proporciona el método getXXX () correspondiente para cada tipo de datos para recuperar el valor de la columna. Cada método se puede utilizar con el nombre de la columna o por su posición ordinal.

SQL JDBC / Java setXXX getXXX
VARCHAR java.lang.String setString getString
CARBONIZARSE java.lang.String setString getString
LONGVARCHAR java.lang.String setString getString
POCO booleano setBoolean getBoolean
NUMÉRICO java.math.BigDecimal setBigDecimal getBigDecimal
TINYINT byte setByte getByte
PEQUEÑO corto setShort getShort
ENTERO En t setInt getInt
EMPEZANDO largo setLong getLong
REAL flotador setFloat getFloat
FLOTADOR flotador setFloat getFloat
DOBLE doble setDouble getDouble
VARBINARIO byte [] setBytes getBytes
BINARIO byte [] setBytes getBytes
FECHA java.sql.Date define la fecha obtener la fecha
HORA java.sql.Time fijar tiempo consigue tiempo
TIMESTAMP java.sql.Timestamp setTimestamp getTimestamp
CLOB java.sql.Clob setClob getClob
GOTA java.sql.Blob setBlob getBlob
FORMACIÓN java.sql.Array setARRAY getARRAY
ÁRBITRO java.sql.Ref SetRef getRef
ESTRUCTURA java.sql.Struct SetStruct getStruct

Tipos de datos de fecha y hora

La clase java.sql.Date se asigna al tipo SQL DATE y las clases java.sql.Time y java.sql.Timestamp se asignan a los tipos de datos SQL TIME y SQL TIMESTAMP, respectivamente.

El siguiente ejemplo muestra cómo las clases de fecha y hora dan formato a los valores de fecha y hora estándar de Java para que coincidan con los requisitos de tipo de datos 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

Ahora compilemos el ejemplo anterior de la siguiente manera:

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

Cuando corres JDBCExample, produce el siguiente 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:\>

Manejo de valores NULL

El uso de SQL de valores NULL y el uso de Java de null son conceptos diferentes. Entonces, para manejar valores SQL NULL en Java, hay tres tácticas que puede usar:

  • Evite el uso de métodos getXXX () que devuelven tipos de datos primitivos.

  • Utilice clases contenedoras para tipos de datos primitivos y utilice el método wasNull () del objeto ResultSet para probar si la variable de clase contenedora que recibió el valor devuelto por el método getXXX () debe establecerse en nulo.

  • Utilice tipos de datos primitivos y el método wasNull () del objeto ResultSet para probar si la variable primitiva que recibió el valor devuelto por el método getXXX () debe establecerse en un valor aceptable que haya elegido para representar un NULL.

Aquí hay un ejemplo para manejar un valor NULO:

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;
}