Conversions de types de données

Pour faciliter la conversion des types de données en langage de programmation Java en types de données SQL Server, le pilote JDBC Microsoft SQL Server 2005 assure les conversions des types de données requises par la spécification JDBC. Pour une flexibilité accrue, tous les types sont convertibles vers et depuis les types de données Object, String et byte[].

Conversions de méthode getter

Le diagramme suivant, basé sur les types de données SQL Server 2005, présente la carte de conversion du pilote JDBC pour les méthodes get<Type> de la classe SQLServerResultSet et les conversions prises en charge pour les méthodes get<Type> de la classe SQLServerCallableStatement.

JDBCGetterConversions

Trois catégories de conversions de base sont prises en charge par les méthodes getter du pilote JDBC :

  • Sans perte (x) : Conversions pour les cas où le type getter est identique ou plus petit que le type de serveur sous-jacent. Par exemple, lors de l'appel de la méthode getBigDecimal sur une colonne décimale de serveur sous-jacente, aucune conversion n'est nécessaire.

  • Converti (y) : Conversions de types de serveurs numériques en types de langage Java où la conversion est ordinaire et suit les règles de conversion en langage Java. Pour ces conversions, la précision est toujours tronquée (jamais arrondie) et les dépassements sont gérés comme un opérateur modulo du type de destination, qui est plus petit. Par exemple, l'appel de getInt sur une colonne decimal sous-jacente qui contient « 1,9999 » retournera « 1 » ou, si la valeur decimal sous-jacente est « 3000000000 », la valeur int engendre un dépassement à « -1294967296 ».

  • Dépendant des données (z) : Les conversions de types de caractères sous-jacents en types numériques requièrent que les types de caractères contiennent des valeurs pouvant être converties dans ces types. Aucune autre conversion n'a lieu. Si la valeur est trop élevée pour le type getter, elle n'est pas valide. Par exemple, en cas d'appel de la méthode getInt sur une colonne varchar(50) contenant « 53 », la valeur est retournée comme int ; en revanche, si la valeur sous-jacente est « xyz » ou « 3000000000 », une erreur est générée.

Conversions de méthode setter

Pour les données de type Java transmises aux méthodes update<Type> de la classe SQLServerResultSet et aux méthodes setObject<Type> de la classe SQLServerPreparedStatement, les conversions suivantes s'appliquent.

JDBCSetterConversions

La méthode setObject sans type de cible spécifié utilise le mappage par défaut. Les méthodes setter pour les paramètres, les méthodes set<Type> de la classe SQLServerPreparedStatement et les méthodes set<Type> de la classe SQLServerCallableStatement utilisent également le mappage par défaut de type Java en JDBC et transmettent ce type au serveur. Le serveur tente toutes les conversions et retourne des erreurs en cas d'échec.

Dans le cas du type de données String, si la valeur dépasse la longueur de VARCHAR, il mappe à LONGVARCHAR. Il en va de même pour byte[]. Les valeurs plus longues que VARBINARY deviennent LONGVARBINARY.

Deux catégories de conversions de base sont prises en charge par les méthodes setter du pilote JDBC :

  • Sans perte (x) : Conversions pour les cas où le type setter est identique ou plus petit que le type de serveur sous-jacent. Par exemple, lors de l'appel de la méthode setBigDecimal sur une colonne setBigDecimal de serveur sous-jacente, aucune conversion n'est nécessaire. Pour les conversions de numérique à caractère, le type de données numeric Java est converti en String. Par exemple, l'appel de la méthode setDouble avec une valeur « 53 » sur une colonne varchar(50) produit une valeur de caractère « 53 » dans cette colonne de destination.

  • Converti (y) : Conversions d'un type numeric Java vers un type numeric de serveur sous-jacent qui est plus petit. Ces conversions sont de type ordinaire et suivent les conventions de conversion SQL Server. La précision est toujours tronquée (jamais arrondie) et les dépassements génèrent une erreur de conversion non prise en charge. Par exemple, l'utilisation de updateDecimal avec la valeur « 1.9999 » sur une colonne de nombres entiers sous-jacente produit « 1 » dans la colonne de destination ; en revanche, en cas de transmission de la valeur « 3000000000 », le pilote génère une erreur.

SQL Server traite le bloc des conversions de définition et de mise à jour et retourne des erreurs au pilote JDBC en cas de problème. Les conversions du côté client constituent l'exception et sont effectuées uniquement dans le cas de valeurs date, time, timestamp, Boolean et String.

Dans le cas des méthodes updateObject et setObject, elles recherchent le type de l'objet transmis et appellent la méthode de type setter appropriée.

Voir aussi

Autres ressources

Présentation des types de données de pilote JDBC