Tipos de datos que se correlacionan con tipos de datos de base de datos en aplicaciones Java

Para escribir programas JDBC y SQLJ eficientes, debe utilizar las mejores correlaciones entre los tipos de datos Java y los tipos de datos de columna de tabla.

Las siguientes tablas resumen las correspondencias de los tipos de datos de Java con los tipos de datos de bases de datos y de JDBC para un Db2 en sistemas Linux®, UNIX y Windows, Db2 for z/OS®, o IBM® Informix® sistema.

Tipos de datos para actualizar columnas de tabla

La siguiente tabla resume las asignaciones de tipos de datos Java a tipos de datos de bases de datos para métodos PreparedStatement.setXXX o ResultSet.updateXXX en programas JDBC, y para expresiones de host de entrada en programas SQLJ. Cuando se enumera más de un tipo de datos Java, el primer tipo de datos es el tipo de datos recomendado.

Tabla 1. Asignaciones de tipos de datos Java a tipos de datos de servidor de datos para actualizar tablas de bases de datos
Tipo de datos Java Tipo de datos de base de datos
short, java.lang.Short SMALLINT
boolean1, byte1, java.lang.Boolean, java.lang.Byte SMALLINT
int, java.lang.Integer ENTERO
long, java.lang.Long BIGINT1 3
java.math.BigInteger BIGINT1 2
java.math.BigInteger CARACTER( n ) 12, 5
float, java.lang.Float REAL
double, java.lang.Double doble
java.math.BigDecimal DECIMAL( p, s ) 2
java.math.BigDecimal DESFLOTA( n ) 3, 4
java.lang.String CARACTER( n ) 5
java.lang.String GRÁFICO( m ) 6
java.lang.String VARCHAR( n ) 7
java.lang.String VARGRAFICO( m ) 8
java.lang.String CLOB9
java.lang.String XML11
byte[] CHAR( n ) PARA DATOS DE BITS 5
byte[] VARCHAR(n) PARA DATOS DE BIT7
byte[] BINARIO( n ) 5, 14
byte[] VARBINARIO( n ) 7, 14
byte[] BLOB9
byte[] ROWID
byte[] XML11
java.sql.Blob BLOB
java.sql.Blob XML11
java.sql.Clob CLOB
java.sql.Clob DBCLOB10
java.sql.NClob DBCLOB10
java.sql.Clob XML11
java.sql.Date FECHA
java.sql.Time Hora
java.sql.Timestamp TIMESTAMP, TIMESTAMP( p ), TIMESTAMP CON ZONA HORARIA, TIMESTAMP( p ) CON ZONA HORARIA 15, 16
java.io.ByteArrayInputStream BLOB
java.io.StringReader CLOB
java.io.ByteArrayInputStream CLOB
java.io.InputStream XML11
ecom.ibm.db2.jcc.DB2RowID (en desuso) ROWID
java.sql.RowId ROWID
com.ibm.db2.jcc.DB2Xml (en desuso) XML11
java.sql.SQLXML XML11
java.util.Date CARACTER( n ) 12, 5
java.util.Date VARCHAR( n ) 12, 5
java.util.Date FECHA12
java.util.Date HORA12
java.util.Date TIMESTAMP, TIMESTAMP( p ), TIMESTAMP CON ZONA HORARIA, TIMESTAMP( p ) CON ZONA HORARIA 12, 15, 16
java.util.Calendar CARACTER( n ) 12, 5
java.util.Calendar VARCHAR( n ) 12, 5
java.util.Calendar FECHA12
java.util.Calendar HORA12
java.util.Calendar TIMESTAMP, TIMESTAMP( p ), TIMESTAMP CON ZONA HORARIA, TIMESTAMP( p ) CON ZONA HORARIA 12, 15, 16
Notas:
  1. Para las actualizaciones de columna, el servidor de datos no tiene un equivalente exacto para los tipos de datos booleanos o de bytes de Java, pero el que mejor se ajusta es SMALLINT.
  2. p es la precisión decimal y s es la escala de la columna de tabla.

    Es conveniente que diseñe las aplicaciones financieras de forma que las columnas de tipo java.math.BigDecimal se correlacionen con columnas de tipo DECIMAL. Si conoce la precisión y la escala de una columna DECIMAL, actualizando los datos de la columna DECIMAL con datos de una variable java.math.BigDecimal obtendrá un rendimiento mejor que si utiliza otras combinaciones de tipos de datos.

  3. n=16 o n=34.
  4. DECFLOAT es válido para conexiones a Db2 for z/OS, Db2 en sistemas Linux, UNIX y Windows, o Db2 para servidores de datos IBM i. El uso de DECFLOAT requiere el SDK para Java versión 5 ( 1.5 ) o posterior.
  5. n <=255.
  6. m<=127.
  7. n <=32704.
  8. m< =16352.
  9. Esta correlación solamente es válida si el servidor de datos puede determinar el tipo de datos de la columna.
  10. Utilice java.sql.Clob si property useJDBC4DataType se establece en DB2BaseDataSource.NO. Utilice java.sql.NClob si la propiedad useJDBC4DataType no está establecida o está establecida en DB2BaseDataSource.YES.
  11. XML es válido para conexiones a servidores de datos de Db2 for z/OS o Db2 en sistemas Linux, UNIX y Windows.
  12. Esta asignación solo es válida para IBM Data Server Driver for JDBC and SQLJ la versión 4.13, o posterior.
  13. BIGINT es válido para conexiones a servidores de datos Db2 for z/OS, servidores de datos Db2 en sistemas Linux, UNIX y Windows, y servidores de datos Db2 para IBM i.
  14. BINARY y VARBINARY son válidos para conexiones a Db2 for z/OS servidores de datos, Db2 para servidores de datos IBM i 5/OS V5R3 o posteriores, o Db2 en servidores de datos de sistemas Linux, UNIX y Windows.
  15. p indica la precisión de la indicación de fecha y hora, que es el número de dígitos de la parte fraccionaria de la indicación de fecha y hora. 0< =p <=12. El valor predeterminado es 6. TIMESTAMP(p) es compatible con conexiones a Db2 en sistemas Linux, UNIX y Windows y Db2 for z/OS.
  16. La cláusula CON ZONA HORARIA solo es compatible con conexiones a Db2 for z/OS.

Tipos de datos para recuperar datos de columnas de tabla

La siguiente tabla resume las correspondencias de Db2 o IBM Informix tipos de datos a tipos de datos Java para métodos ResultSet.getXXX en programas JDBC y para iteradores en programas SQLJ. Esta tabla no incluye los tipos de objetos contenedores numéricos de Java, que se recuperan utilizando ResultSet.getObject.

Tabla 2. Asignaciones de tipos de datos de servidores de datos a tipos de datos Java para recuperar datos de tablas de servidores de datos
Tipos de datos SQL Tipo de datos Java o tipo de objeto Java recomendado Otros tipos de datos Java compatibles
SMALLINT short byte, int, long, float, double, java.math.BigDecimal, boolean, java.lang.String
ENTERO int short, byte, long, float, double, java.math.BigDecimal, boolean, java.lang.String
BIGINT 6 long int, short, byte, float, double, java.math.BigDecimal, boolean, java.lang.String
DECIMAL(p,s) o NUMERIC(p,s) java.math.BigDecimal long, int, short, byte, float, double, boolean, java.lang.String
DESFLOTA( n ) 1, 2 java.math.BigDecimal long, int, short, byte, float, double, java.math.BigDecimal, boolean, java.lang.String
REAL flotante long, int, short, byte, double, java.math.BigDecimal, boolean, java.lang.String
doble doble long, int, short, byte, float, java.math.BigDecimal, boolean, java.lang.String
CAR(n ) java.lang.String long, int, short, byte, float, double, java.math.BigDecimal, boolean, java.sql.Date, java.sql.Time, java.sql.Timestamp, java.io.InputStream, java.io.Reader
VAR CHAR(n) java.lang.String long, int, short, byte, float, double, java.math.BigDecimal, boolean, java.sql.Date, java.sql.Time, java.sql.Timestamp, java.io.InputStream, java.io.Reader
CAR(n ) PARA DATOS DE BIT byte[] java.lang.String, java.io.InputStream, java.io.Reader
VARCHAR(n) PARA DATOS DE BIT byte[] java.lang.String, java.io.InputStream, java.io.Reader
BINARIO( n ) 7 byte[] Ninguno
VARBINARIO( n ) 7 byte[] Ninguno
GRÁFICO(m) java.lang.String long, int, short, byte, float, double, java.math.BigDecimal, boolean, java.sql.Date, java.sql.Time, java.sql.Timestamp, java.io.InputStream, java.io.Reader
VARGRÁFICO(m ) java.lang.String long, int, short, byte, float, double, java.math.BigDecimal, boolean, java.sql.Date, java.sql.Time, java.sql.Timestamp, java.io.InputStream, java.io.Reader
CLOB(n ) java.sql.Clob java.lang.String
BL OB (n) java.sql.Blob byte []3
DBCL OB (m) No hay un equivalente exacto. 5  
ROWID java.sql.RowId byte[], com.ibm.db2.jcc.DB2RowID (en desuso)
XML4 java.sql.SQLXML byte[], java.lang.String, java.io.InputStream, java.io.Reader
FECHA java.sql.Date java.sql.String, java.sql.Timestamp
Hora java.sql.Time java.sql.String, java.sql.Timestamp
TIMESTAMP, TIMESTAMP( p ), TIMESTAMP CON ZONA HORARIA, TIMESTAMP( p ) CON ZONA HORARIA 8, 9 java.sql.Timestamp java.sql.String, java.sql.Date, java.sql.Time, java.sql.Timestamp
Notas:
  1. n=16 o n=34.
  2. DECFLOAT es válido para conexiones a Db2 for z/OS, Db2 en sistemas Linux, UNIX y Windows, o Db2 para servidores de datos IBM i. El uso de DECFLOAT requiere el SDK para Java versión 5 ( 1.5 ) o posterior.
  3. Esta correlación solamente es válida si el servidor de datos puede determinar el tipo de datos de la columna.
  4. XML es válido para conexiones a servidores de datos de Db2 for z/OS o Db2 en sistemas Linux, UNIX y Windows.
  5. Utilice java.sql.Clob si property useJDBC4DataType se establece en DB2BaseDataSource.NO. Utilice java.sql.NClob si la propiedad useJDBC4DataType no está establecida o está establecida en DB2BaseDataSource.YES.
  6. BIGINT es válido para conexiones a servidores de datos Db2 for z/OS, servidores de datos Db2 en sistemas Linux, UNIX y Windows, y todos los servidores de datos Db2 para IBM i compatibles.
  7. BINARY y VARBINARY son válidos para conexiones a Db2 for z/OS servidores de datos, Db2 para servidores de datos IBM i 5/OS V5R3 y posteriores, o Db2 en servidores de datos de sistemas Linux, UNIX y Windows.
  8. p indica la precisión de la indicación de fecha y hora, que es el número de dígitos de la parte fraccionaria de la indicación de fecha y hora. 0< =p <=12. El valor predeterminado es 6. TIMESTAMP(p) es compatible con conexiones a Db2 en sistemas Linux, UNIX y Windows V9.7 y posteriores y Db2 for z/OS V10 y posteriores únicamente.
  9. La cláusula CON ZONA HORARIA solo es compatible con conexiones a Db2 for z/OS.

Tipos de datos para invocar procedimientos almacenados y funciones definidas por el usuario

La siguiente tabla resume las correspondencias entre los tipos de datos Java y los tipos de datos de JDBC, y Db2 o IBM Informix tipos de datos para llamar a parámetros de funciones definidas por el usuario y procedimientos almacenados. Las asignaciones de tipos de datos Java a tipos de datos de l JDBC e son para métodos de l CallableStatement.registerOutParameter e en programas de l JDBC. Las asignaciones de tipos de datos Java a tipos de datos del servidor de datos son para parámetros en procedimientos almacenados o invocaciones de funciones definidas por el usuario.

Si en la siguiente tabla aparece más de un tipo de datos Java, el primer tipo de datos es el recomendado.

Tabla 3. Asignaciones de tipos de datos Java, JDBC y SQL para llamar a procedimientos almacenados y funciones definidas por el usuario
Tipo de datos Java Tipo de datos de JDBC Tipo de datos SQL1
booleano2, java.lang.Boolean BIT SMALLINT
byte2, java.lang.Byte TINYINT SMALLINT
short, java.lang.Short SMALLINT SMALLINT
int, java.lang.Integer ENTERO ENTERO
long, java.lang.Long BIGINT BIGINT 6
float, java.lang.Float REAL REAL
float, java.lang.Float FLOAT REAL
double, java.lang.Double DOUBLE doble
java.math.BigDecimal DECIMAL DECIMAL
java.math.BigDecimal java.types.OTHER DESFLOTA n.º 3
java.math.BigDecimal com.ibm.db2.jcc.DB2Types.DECFLOAT DESFLOTA n.º 3
java.lang.String CHAR CHAR
java.lang.String CHAR GRAPHIC
java.lang.String VARCHAR VARCHAR
java.lang.String VARCHAR VARGRAPHIC
java.lang.String LONGVARCHAR VARCHAR
java.lang.String VARCHAR CLOB
java.lang.String LONGVARCHAR CLOB
java.lang.String CLOB CLOB
byte[] BINARY CHAR FOR BIT DATA
byte[] VARBINARY VARCHAR FOR BIT DATA
byte[] BINARY BINARIO5
byte[] VARBINARY VARBINARIO5
byte[] LONGVARBINARY VARCHAR FOR BIT DATA
byte[] VARBINARY BLOB 4
byte[] LONGVARBINARY BLOB 4
java.sql.Date FECHA FECHA
java.sql.Time HORA Hora
java.sql.Timestamp TIMESTAMP TIMESTAMP, TIMESTAMP( p ), TIMESTAMP CON ZONA HORARIA, TIMESTAMP( p ) CON ZONA HORARIA 7, 8
java.sql.Blob BLOB BLOB
java.sql.Clob CLOB CLOB
java.sql.Clob CLOB DBCLOB
java.io.ByteArrayInputStream Ninguno BLOB
java.io.StringReader Ninguno CLOB
java.io.ByteArrayInputStream Ninguno CLOB
ecom.ibm.db2.jcc.DB2RowID (en desuso) com.ibm.db2.jcc.DB2Types.ROWID ROWID
java.sql.RowId java.sql.Types.ROWID ROWID
java.sql.SQLXML java.sql.Types.SQLXML XML
java.sql.ResultSet com.ibm.db2.jcc.DB2Types.CURSOR Tipo de cursor
Notas:
  1. Un Db2 for z/OS procedimiento almacenado o parámetro de función definida por el usuario no puede tener el tipo de datos XML.
  2. Un procedimiento almacenado o función definida por el usuario que esté definido con un parámetro de tipo SMALLINT se puede invocar con un parámetro de tipo boolean o byte. Sin embargo, esto no es aconsejable.
  3. Los parámetros DECFLOAT en las rutinas Java solo son válidos para conexiones a Db2 for z/OS servidores de datos. Los parámetros DECFLOAT en rutinas Java no son compatibles con conexiones a Linux, UNIX y Windows o Db2 para IBM i. El uso de DECFLOAT requiere el SDK para Java versión 5 ( 1.5 ) o posterior.
  4. Esta correlación solamente es válida si el servidor de datos puede determinar el tipo de datos de la columna.
  5. BINARY y VARBINARY son válidos para conexiones a Db2 for z/OS servidores de datos, Db2 para servidores de datos IBM i 5/OS V5R3 y posteriores, o Db2 en servidores de datos de sistemas Linux, UNIX y Windows.
  6. BIGINT es válido para conexiones a Db2 for z/OS servidores de datos y Db2 en sistemas Linux, UNIX y Windows. servidores de datos.
  7. p indica la precisión de la indicación de fecha y hora, que es el número de dígitos de la parte fraccionaria de la indicación de fecha y hora. 0< =p <=12. El valor predeterminado es 6. TIMESTAMP(p) es compatible con conexiones a Db2 en sistemas Linux, UNIX y Windows y Db2 for z/OS.
  8. La cláusula CON ZONA HORARIA es compatible con conexiones a Db2 for z/OS.

Tipos de datos en procedimientos almacenados de Java y funciones definidas por el usuario

La siguiente tabla resume las asignaciones de los tipos de datos de parámetros SQL en una instrucción CREATE PROCEDURE o CREATE FUNCTION a los tipos de datos en el correspondiente procedimiento almacenado Java o método de función definida por el usuario.

Para Db2 en sistemas Linux, UNIX y Windows, si se enumera más de un tipo de datos Java para un tipo de datos SQL, solo es válido el primer tipo de datos Java.

Para Db2 for z/OS, si se indica más de un tipo de datos Java y utiliza un tipo de datos distinto del primero como parámetro de método, debe incluir una firma de método en la cláusula EXTERNAL de la instrucción CREATE PROCEDURE o CREATE FUNCTION que especifique los tipos de datos Java de los parámetros de método.

Tabla 4. Asignaciones de tipos de datos SQL en una instrucción CREATE PROCEDURE o CREATE FUNCTION a tipos de datos en el procedimiento almacenado Java correspondiente o programa de función definida por el usuario
Tipo de datos SQL en CREATE PROCEDURE o CREATE FUNCTION1 Tipo de datos en el procedimiento almacenado de Java o método de función definida por el usuario 2
SMALLINT short, java.lang.Integer
ENTERO int, java.lang.Integer
MAYÚSCULA3 long, java.lang.Long
REAL float, java.lang.Float
doble double, java.lang.Double
DECIMAL java.math.BigDecimal
DECFLOAT4 java.math.BigDecimal
CHAR java.lang.String
VARCHAR java.lang.String
CHAR FOR BIT DATA byte[]
VARCHAR FOR BIT DATA byte[]
BINARIO5 byte[]
VARBINARIO5 byte[]
FECHA java.sql.Date
Hora java.sql.Time
TIMESTAMP, TIMESTAMP( p ), TIMESTAMP CON ZONA HORARIA, TIMESTAMP( p ) CON ZONA HORARIA 6, 7 java.sql.Timestamp
BLOB java.sql.Blob
CLOB java.sql.Clob
DBCLOB java.sql.Clob
ROWID java.sql.Types.ROWID
Notas:
  1. Un Db2 for z/OS procedimiento almacenado o parámetro de función definida por el usuario no puede tener el tipo de datos XML.
  2. Para un procedimiento almacenado o una función definida por el usuario en un servidor Db2 en sistemas Linux, UNIX y Windows, solo es válido el primer tipo de datos.
  3. BIGINT es válido para conexiones a Db2 for z/OS servidores de datos o Db2 en sistemas Linux, UNIX y Windows.
  4. Los parámetros DECFLOAT en las rutinas Java solo son válidos para conexiones a Db2 for z/OS servidores de datos. Los parámetros DECFLOAT en rutinas Java no son compatibles con conexiones a Linux, UNIX y Windows o Db2 para IBM i. El uso de DECFLOAT requiere el SDK para Java versión 5 ( 1.5 ) o posterior.
  5. BINARY y VARBINARY son válidos para conexiones a Db2 for z/OS servidores de datos, Db2 para servidores de datos IBM i 5/OS V5R3 o posteriores, o Db2 en servidores de datos de sistemas Linux, UNIX y Windows.
  6. p indica la precisión de la indicación de fecha y hora, que es el número de dígitos de la parte fraccionaria de la indicación de fecha y hora. 0< =p <=12. El valor predeterminado es 6. TIMESTAMP( p ) es compatible con conexiones a servidores de datos de Db2 en sistemas Linux, UNIX y Windows y servidores de datos de Db2 for z/OS.
  7. La cláusula CON ZONA HORARIA es compatible con las conexiones a Db2 for z/OS servidores de datos.