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