JDBC - Types de données

Le pilote JDBC convertit le type de données Java en type JDBC approprié, avant de l'envoyer à la base de données. Il utilise un mappage par défaut pour la plupart des types de données. Par exemple, un int Java est converti en un INTEGER SQL. Les mappages par défaut ont été créés pour assurer la cohérence entre les pilotes.

Le tableau suivant récapitule le type de données JDBC par défaut vers lequel le type de données Java est converti, lorsque vous appelez la méthode setXXX () de l'objet PreparedStatement ou CallableStatement ou de la méthode ResultSet.updateXXX ().

SQL JDBC / Java setXXX updateXXX
VARCHAR java.lang.String setString updateString
CARBONISER java.lang.String setString updateString
LONGVARCHAR java.lang.String setString updateString
BIT booléen setBoolean updateBoolean
NUMÉRIQUE java.math.BigDecimal setBigDecimal updateBigDecimal
TINYINT octet setByte updateByte
PETITE MENTHE court setShort updateShort
ENTIER int setInt updateInt
GRAND longue setLong updateLong
RÉEL flotte setFloat updateFloat
FLOTTE flotte setFloat updateFloat
DOUBLE double setDouble mise à jourDouble
VARBINAIRE octet [] setBytes updateBytes
BINAIRE octet [] setBytes updateBytes
DATE java.sql.Date régler la date date de mise à jour
TEMPS java.sql.Time régler le temps temps de mise à jour
HORAIRE java.sql.Timestamp setTimestamp updateTimestamp
CLOB java.sql.Clob setClob updateClob
GOUTTE java.sql.Blob setBlob updateBlob
TABLEAU java.sql.Array setARRAY mise à jour
REF java.sql.Ref SetRef updateRef
STRUCT java.sql.Struct SetStruct updateStruct

JDBC 3.0 a amélioré la prise en charge des types de données BLOB, CLOB, ARRAY et REF. L'objet ResultSet dispose désormais des méthodes updateBLOB (), updateCLOB (), updateArray () et updateRef () qui vous permettent de manipuler directement les données respectives sur le serveur.

Les méthodes setXXX () et updateXXX () vous permettent de convertir des types Java spécifiques en types de données JDBC spécifiques. Les méthodes, setObject () et updateObject (), vous permettent de mapper presque n'importe quel type Java à un type de données JDBC.

L'objet ResultSet fournit la méthode getXXX () correspondante pour chaque type de données pour récupérer la valeur de la colonne. Chaque méthode peut être utilisée avec le nom de la colonne ou par sa position ordinale.

SQL JDBC / Java setXXX getXXX
VARCHAR java.lang.String setString getString
CARBONISER java.lang.String setString getString
LONGVARCHAR java.lang.String setString getString
BIT booléen setBoolean getBoolean
NUMÉRIQUE java.math.BigDecimal setBigDecimal getBigDecimal
TINYINT octet setByte getByte
PETITE MENTHE court setShort getShort
ENTIER int setInt getInt
GRAND longue setLong getLong
RÉEL flotte setFloat getFloat
FLOTTE flotte setFloat getFloat
DOUBLE double setDouble getDouble
VARBINAIRE octet [] setBytes getBytes
BINAIRE octet [] setBytes getBytes
DATE java.sql.Date régler la date avoir un rendez-vous
TEMPS java.sql.Time régler le temps obtenir du temps
HORAIRE java.sql.Timestamp setTimestamp getTimestamp
CLOB java.sql.Clob setClob getClob
GOUTTE java.sql.Blob setBlob getBlob
TABLEAU java.sql.Array setARRAY getARRAY
REF java.sql.Ref SetRef getRef
STRUCT java.sql.Struct SetStruct getStruct

Types de données de date et d'heure

La classe java.sql.Date est mappée au type SQL DATE, et les classes java.sql.Time et java.sql.Timestamp correspondent respectivement aux types de données SQL TIME et SQL TIMESTAMP.

L'exemple suivant montre comment les classes Date et Heure mettent en forme les valeurs de date et d'heure Java standard pour correspondre aux exigences du type de données 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

Maintenant, compilons l'exemple ci-dessus comme suit -

C:\>javac SqlDateTime.java
C:\>

Quand tu cours JDBCExample, il produit le résultat suivant -

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:\>

Gestion des valeurs NULL

L'utilisation par SQL des valeurs NULL et l'utilisation par Java de null sont des concepts différents. Ainsi, pour gérer les valeurs SQL NULL en Java, vous pouvez utiliser trois tactiques:

  • Évitez d'utiliser les méthodes getXXX () qui renvoient des types de données primitifs.

  • Utilisez des classes wrapper pour les types de données primitifs et utilisez la méthode wasNull () de l'objet ResultSet pour tester si la variable de classe wrapper qui a reçu la valeur renvoyée par la méthode getXXX () doit être définie sur null.

  • Utilisez des types de données primitifs et la méthode wasNull () de l'objet ResultSet pour tester si la variable primitive qui a reçu la valeur renvoyée par la méthode getXXX () doit être définie sur une valeur acceptable que vous avez choisie pour représenter un NULL.

Voici un exemple pour gérer une valeur NULL -

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