Descripción de las conversiones de tipos de datos

Para facilitar la conversión de tipo de datos del lenguaje de programación Java a tipos de datos SQL Server, el controlador JDBC de Microsoft SQL Server 2005 proporciona las conversiones de tipos de datos que requiere la especificación JDBC. Para mejorar la flexibilidad, todos los tipos son convertibles entre los tipos de datos Object, String y byte[].

Conversiones de métodos de obtención

Según los tipos de datos SQL Server 2005, el siguiente cuadro contiene el mapa de conversión del controlador JDBC para los métodos get<Type> de la clase SQLServerResultSet y las conversiones no admitidas para los métodos get<Type> de la clase SQLServerCallableStatement.

JDBCGetterConversions

Los métodos captadores del controlador JDBC admiten tres categorías básicas de conversiones:

  • Sin pérdidas (x): conversiones para los casos en los que el tipo de obtención es igual o menor que el tipo de servidor subyacente. Por ejemplo, al llamar a getBigDecimal en una columna decimal del servidor subyacente, no es necesario realizar ninguna conversión.

  • Convertido (y): conversiones desde tipos de servidores numéricos a tipos del lenguaje Java en las que la conversión es normal y sigue las reglas de conversión del lenguaje Java. Para estas conversiones, la precisión siempre se trunca, nunca se redondea, y el desbordamiento se trata como un módulo del tipo de destino, que es más pequeño. Por ejemplo, al llamar a getInt en una columna decimal subyacente que contiene "1.9999", por ejemplo, se devolverá "1", o si el valor decimal subyacente es "3000000000", el valor int se desborda a "-1294967296".

  • Dependiente de datos (z): Las conversiones de tipos de caracteres subyacentes a tipos numéricos requieren que los tipos de caracteres contengan valores que se puedan convertir a ese tipo. No se realiza ninguna otra conversión. Si el valor es demasiado grande para el tipo de obtención, el valor no es válido. Por ejemplo, si se llama a getInt en una columna varchar(50) que contiene "53", el valor se devuelve como un int, pero si el valor subyacente es "xyz" o "3000000000", se genera un error.

Conversiones del método de establecimiento

Para los tipos de datos de Java pasados a los métodos update<Type> de la clase SQLServerResultSet y los métodos setObject<Type> de la clase SQLServerPreparedStatement, se aplican las siguientes conversiones.

JDBCSetterConversions

El método setObject sin un tipo de destino especificado usará la asignación predeterminada. Los tipos de establecimiento para los parámetros, los métodos set<Type> de la clase SQLServerPreparedStatement, y los métodos set<Type> de la clase SQLServerCallableStatement también usarán la asignación predeterminada de tipo de Java a JDBC y pasará ese tipo al servidor. El servidor intentará realizar las conversiones y devolverá errores si no lo consigue.

En el caso del tipo de datos String, si el valor supera la longitud de VARCHAR, se asigna a LONGVARCHAR. Lo mismo sucede para los byte[]. Los valores mayores que VARBINARY se vuelven LONGVARBINARY.

Los métodos de establecimiento del controlador JDBC admiten dos categorías básicas de conversiones:

  • Sin pérdidas (x): conversiones para los casos en los que el tipo de establecimiento es igual o menor que el tipo de servidor subyacente. Por ejemplo, al llamar a setBigDecimal en una columna decimal del servidor subyacente, no es necesario realizar ninguna conversión. En los casos de conversión de tipo numérico a carácter, el tipo de datos numeric de Java se convierte en String. Por ejemplo, si se llama a setDouble con el valor "53" en una columna varchar(50), se producirá un valor de carácter "53" en esa columna de destino.

  • Convertido (y): las conversiones de un tipo numeric de Java a un tipo numeric del servidor subyacente que es menor. Esta conversión es normal y sigue las convenciones de conversión de SQL Server. La precisión siempre se trunca, nunca se redondea, y el desbordamiento lanza un error de conversión no admitida. Por ejemplo, si se utiliza updateDecimal con un valor de "1,9999" en una columna subyacente de enteros, el resultado será "1" en la columna destino, pero si se pasa "3000000000", el controlador lanzará un error.

SQL Server realiza el grueso de las conversiones de establecimiento y actualización y devolverá errores al controlador JDBC cuando encuentre algún problema. Las conversiones del lado cliente son la excepción y sólo se realizan en el caso de los valores date, time, timestamp, Boolean y String.

En el caso de updateObject y setObject, los métodos buscan el tipo del objeto pasado y hacen la llamada al método de establecimiento adecuado.

Vea también

Otros recursos

Descripción de los tipos de datos del controlador JDBC