Tipos SQL en Java

Muchos de los tipos de datos estándar de SQL no tienen equivalentes nativos en Java. Para superar esta deficiencia, se deben mapear o convertir, los tipos de datos SQL en Java utilizando las clases JDBC para acceder a los tipos de datos SQL. Es necesario saber cómo recuperar adecuadamente tipos de datos Java como int, long o String a partir de sus contrapartidas SQL almacenadas en la base de datos. Esto puede ser muy importante a la hora de trabajar con datos numéricos, que necesiten control decimal, o con fechas SQL.

El mapeo de los tipos de datos Java a SQL es muy sencillo, tal como se muestra en la tabla que acompaña a este párrafo. Observa que los tipos que comienzan por Java no son tipos básicos, sino clases que contienen métodos para trasladar los datos a formatos utilizables, que son necesarias porque no hay un tipo de dato básico que mapee directamente su contrapartida SQL. La creación de estas clases debe hacerse siempre que se necesite almacenar un tipo de dato SQL en un programa Java, para poder utilizar directamente el dato desde la base de datos.

 

Java SQL
String VARCHAR
Boolean BIT
Byte TINYINT
Short SMALLINT
Int INTEGER
Long BIGINT
Float REAL
Double DOUBLE
byte[]: imágenes, sonidos, … VARBINARY (BLOBS)
java.sql.Date DATE
java.sql.Timestamp TIMESTAMP
java.math.BigDecimal NUMERIC
Clob CLOB
Array ARRAY
Struct STRUCT
Ref REF
clase Java JAVA_OBJECT

El tipo de dato byte[] es un array de bytes de tamaño variable. Esta estructura de datos guarda datos binarios, que en SQL son VARBINARY y LONGVARBINARY. Estos tipos se utilizan para almacenar imágenes, ficheros de documentos y cosas así. Para almacenar y recuperar este tipo de información de la base de datos, se deben utilizar los métodos para control de streams que proporciona JDBC: setBinaryStream() y getBinaryStream().

JDBC proporciona un mecanismo para mapear tipos SQL a clases Java a través de los métodos getObject() y setObject(), pero además, también permite utilizar una instancia de java.util.Map para realizar un mapeo específico de UDTs (tipos definidos por el usuario). Las clases en este mapa propio implementan la interfaz SQLData que incluye los métodos para operar sobre tipos definidos por el usuario. Además, define el tipo JAVA_OBJECT para objetos Java y proporciona métodos que devuelven información sobre estos objetos Java y UDTs.

La base de datos PostgreSQL hace un uso de esta característica y proporciona tipos para algunos de los que dispone Java, de forma que cuando se utiliza getObjetc() sobre un objeto de tipo ResultSet devuelve un tipo específico PG_Object, que puede ser: box, circle, line, lseg, path, point y polygon. Las siguientes líneas muestran un ejemplo en el que se recupera un point de la columna 6 de un determinado registro.

PG_Object objeto = (PG_Object)res.getObject(6);

PGpoint punto = objeto.getPoint();

System.out.println(“Coordenada x=” + punto.x + “, y=” + punto.y);

En la tabla siguiente se muestran los tipos Java correspondientes a cada uno de los tipos SQL.

SQL Java
CHAR String
VARCHAR String
LONGVARCHAR String
NUMERIC java.Math.BigDecimal
DECIMAL java.Math.BigDecimal
BIT Boolean
TINYINT Byte
SMALLINT Short
INTEGER Int
BIGINT long
REAL float
DOUBLE double
FLOAT double
BINARY byte []
VARBINARY byte []
LONGVARBINARY byte []
DATE java.sql.Date
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp

Como se puede observar en la tabla, la conversión  de tipos en el sentido de SQL a Java puede no estar tan clara, ya que hay tipos SQL cuyo tipo Java correspondiente puede no ser evidente, como VARBINARY o DECIMAL:

Existe una constante para cada tipo de dato SQL, que se encuentra declarada en java.sql.Types; así, al tipo TIMESTAMP le corresponde la constante TIMESTAMP, por ejemplo.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.