Utilisation des types de données de base

Télécharger le pilote JDBC

Le pilote Microsoft JDBC pour SQL Server utilise les types de données JDBC de base pour convertir les types de données SQL Server en un format compréhensible par le langage de programmation Java, et vice et versa. Le pilote JDBC prend en charge l'API JDBC 4.0, qui inclut le type de données SQLXML et les types de données nationaux (Unicode), par exemple NCHAR, NVARCHAR, LONGNVARCHAR et NCLOB.

Mappages de types de données

Le tableau suivant répertorie les mappages par défaut entre les types de données de base SQL Server, JDBC et du langage de programmation Java :

Types SQL Server Types JDBC (java.sql.Types) Types langage Java
bigint bigint long
binary BINARY byte[]
bit BIT boolean
char CHAR String
Date DATE java.sql.Date
DateHeure3 timestamp java.sql.Timestamp
datetime2 timestamp java.sql.Timestamp
datetimeoffset2 microsoft.sql.Types.DATETIMEOFFSET microsoft.sql.DateTimeOffset
Décimal DECIMAL java.math.BigDecimal
float DOUBLE double
image LONGVARBINARY byte[]
int INTEGER int
money DECIMAL java.math.BigDecimal
NCHAR CHAR

NCHAR (Java SE 6.0)
String
ntext LONGVARCHAR

LONGNVARCHAR (Java SE 6.0)
String
numeric NUMERIC java.math.BigDecimal
NVARCHAR VARCHAR

NVARCHAR (Java SE 6.0)
String
nvarchar(max) VARCHAR

NVARCHAR (Java SE 6.0)
String
real real float
smalldatetime timestamp java.sql.Timestamp
SMALLINT SMALLINT short
SMALLMONEY DECIMAL java.math.BigDecimal
text LONGVARCHAR String
time TIME1 java.sql.Time1
timestamp BINARY byte[]
TINYINT TINYINT short
udt VARBINARY byte[]
UNIQUEIDENTIFIER CHAR String
varbinary VARBINARY byte[]
varbinary(max) VARBINARY byte[]
varchar VARCHAR String
varchar(max) VARCHAR String
Xml LONGVARCHAR

LONGNVARCHAR (Java SE 6.0)
String

SQLXML
sqlvariant microsoft.sql.Types.SQL_VARIANT Object
geometry VARBINARY byte[]
Geography VARBINARY byte[]

1 Pour utiliser java.sql.Time avec le type d’heure SQL Server, vous devez affecter à la propriété de connexion sendTimeAsDatetime la valeur False.

2 Vous pouvez accéder par programme aux valeurs de datetimeoffset avec la classe DateTimeOffset.

3 Les valeurs java.sql.Timestamp ne peuvent plus être utilisées pour comparer des valeurs d’une colonne DateHeure à partir de SQL Server 2016. Cette limitation est due à une modification côté serveur qui convertit DateHeure en DateHeure2 de façon différente, ce qui génère des valeurs inégales. Pour contourner ce problème, vous pouvez soit modifier les colonnes DateHeure en DateHeure2(3), utiliser String au lieu de java.sql.Timestamp ou modifier le niveau de compatibilité de la base de données par 120 ou en dessous.

Les sections suivantes proposent des exemples d'utilisation du pilote JDBC et des types de données de base. Pour obtenir un exemple plus détaillé sur l’utilisation des types de données de base dans une application Java, consultez Exemple de types de données de base.

Extraction de données sous la forme d'une chaîne

Si vous devez récupérer des données d’une source de données qui correspond à l’un des types de données de base JDBC pour les afficher en tant que chaîne, ou si des données fortement typées ne sont pas nécessaires, appliquez la méthode getString de la classe SQLServerResultSet. L’exemple suivant illustre cette utilisation :

try(Statement stmt = con.createStatement();) {
    ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee WHERE (lname = 'Brown')");
    rs.next();
    short empJobID = rs.getString("job_id");
}

Extraction de données par type de données

Si vous devez récupérer des données d’une source de données et que vous connaissez le type des données récupérées, utilisez l’une des méthodes get<Type> de la classe SQLServerResultSet, également appelées méthodes getter. Vous pouvez utiliser un nom de colonne ou un index de colonne avec les méthodes get<Type>, comme dans l'exemple suivant :

try(Statement stmt = con.createStatement();) {
    ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee WHERE (lname = 'Brown')");
    rs.next();
    short empJobID = rs.getShort("job_id");
}

Remarque

Le pilote JDBC déconseille et ne prend pas en charge les méthodes getUnicodeStream et getBigDecimal avec échelle.

Mise à jour des données par type de données

Si vous devez mettre à jour la valeur d’un champ dans une source de données, utilisez l’une des méthodes update<Type> de la classe SQLServerResultSet. Dans l’exemple suivant, la méthode updateInt est appliquée avec la méthode updateRow pour mettre à jour les données dans la source de données :

try (Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);) {
    ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee WHERE (lname = 'Brown')");
    rs.next();
    int empJobID = rs.getInt(2);
    empJobID++;
    rs.first();
    rs.updateInt(2, empJobID);
    rs.updateRow();
}

Remarque

Le pilote JDBC ne peut pas mettre à jour une colonne SQL Server avec un nom de colonne dont la longueur dépasse 127 caractères. Si une mise à jour est tentée sur une colonne dont le nom dépasse 127 caractères, une exception est levée.

Mise à jour des données par requête paramétrable

Si vous mettez à jour des données dans une source de données en utilisant une requête paramétrable, vous pouvez définir le type de données des paramètres en utilisant une des méthodes set<Type> de la classe SQLServerPreparedStatement. Ces méthodes sont également appelées méthodes setter. Dans l’exemple suivant, la méthode prepareStatement est utilisée pour précompiler la requête paramétrable, puis la méthode setString est utilisée pour définir la valeur de chaîne du paramètre avant d’appeler la méthode executeUpdate.

try(PreparedStatement pstmt = con.prepareStatement("UPDATE employee SET fname = ? WHERE (lname = 'Brown')");) {
    String name = "Bob";
    pstmt.setString(1, name);
    int rowCount = pstmt.executeUpdate();
}

Pour plus d’informations sur les requêtes paramétrables, consultez Utilisation d'une instruction SQL avec paramètres.

Transmission de paramètres à une procédure stockée

Si vous devez passer des paramètres typés dans une procédure stockée, vous pouvez définir les paramètres par index ou par nom en utilisant une des méthodes set<Type> de la classe SQLServerCallableStatement. Dans l’exemple suivant, la méthode prepareCall est utilisée pour configurer l’appel de la procédure stockée, puis la méthode setString est utilisée pour définir le paramètre de l’appel avant l’appel de la méthode executeQuery.

try(CallableStatement cstmt = con.prepareCall("{call employee_jobid(?)}");) {
    String lname = "Brown";
    cstmt.setString(1, lname);
    ResultSet rs = cstmt.executeQuery();
}

Notes

Dans cet exemple, un jeu de résultats est retourné avec les résultats de l'exécution de la procédure stockée.

BigDecimal

Lors de l’utilisation de valeurs de paramètres BigDecimal, la précision et l’échelle peuvent être transmises avec la valeur par l’intermédiaire de setBigDecimal. L’utilisation de setBigDecimal avec cette méthode évite la troncation de valeur potentielle. Sinon, si l’option de chaîne de connexion calcBigDecimalPrecision est définie sur true, le pilote calcule la précision de l’entrée BigDecimal au nom de l’utilisateur, au détriment des performances. Si la valeur est transmise seule, sans calcBigDecimalPrecision, ou si l’option est définie sur false, le pilote prend la valeur maximale autorisée (38) pour la précision de cette valeur BigDecimal.

Pour plus d'informations sur l'utilisation du pilote JDBC avec les procédures stockées et les paramètres d'entrée, consultez Utilisation d'une procédure stockée avec des paramètres d'entrée.

Extraction de paramètres à partir d'une procédure stockée

Si vous devez récupérer des paramètres d’une procédure stockée, vous devez tout d’abord inscrire un paramètre out par nom ou index à l’aide de la méthode registerOutParameter de la classe SQLServerCallableStatement. Attribuez ensuite le paramètre out retourné à une variable appropriée après l’exécution de l’appel de la procédure stockée. Dans l’exemple suivant, la méthode prepareCall est utilisée pour configurer l’appel de la procédure stockée, la méthode registerOutParameter est utilisée pour configurer le paramètre out, puis la méthode setString est utilisée pour définir le paramètre pour l’appel avant l’appel de la méthode executeQuery. La valeur du paramètre out de la procédure stockée est récupérée à l’aide de la méthode getShort.

try(CallableStatement cstmt = con.prepareCall("{call employee_jobid (?, ?)}");) {
    cstmt.registerOutParameter(2, java.sql.Types.SMALLINT);
    String lname = "Brown";
    cstmt.setString(1, lname);
    ResultSet rs = cstmt.executeQuery();
    short empJobID = cstmt.getShort(2);
}

Remarque

Outre le paramètre OUT retourné, un jeu de résultats peut également être retourné avec les résultats de l'exécution de la procédure stockée.

Pour plus d'informations sur l'utilisation du pilote JDBC avec les procédures stockées et les paramètres de sortie, consultez Utilisation d'une procédure stockée avec des paramètres de sortie.

Voir aussi

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