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