FAQ Oracle JDBC

Cette FAQ contient des réponses aux questions les plus fréquentes sur les pilotes JDBC d'Oracle. Notez que cette FAQ répond uniquement à des questions techniques spécifiques et couvre également les problèmes connus. Consultez le Guide des développeurs JDBC et la Javadoc pour JDBC pour en savoir plus sur les fonctionnalités et leur utilisation dans votre application. 


Questions fréquemment posées

    • Nouveautés de 26ai
    • Existe-t-il des documents relatifs à Oracle Database Cloud Service pour les développeurs Java ?

JDBC en général

    • Qu'est-ce que JDBC ?
    • Où puis-je en savoir plus sur JDBC ?
    • Où puis-je en savoir plus sur Java ?

Questions spécifiques à la version

    • Quelle version des pilotes JDBC est prise en charge ?

Version

Date de GA

Fin du support Premier

Fin du support étendu

Fin du support de maintien

26ia Jan. 2026
  • Déc. 2031
Déc. 2031 Non défini
21c (Version de l'innovation) Août 2021 Juillet 2027 Non disponible Non défini
19c (version à long terme) Avril 2019 Déc. 2029 (voir Lifetime Support Policy) Déc 2032 Non défini
18c Juillet 2018 Juin 2021 Non disponible Non défini
12.2 Mars 2017 30 novembre 2020 (Période de correction limitée des erreurs pour 12.2.0.1 - 1er décembre 2020 - 31 mars 2022) Non disponible Non défini
EE 12.1 Juin 2013 Juillet 2018 Juillet 2022 Non défini

    • Qu'est-ce que la matrice d'interopérabilité JDBC et RDBMS ou la matrice de certification ?

Matrice d'interopérabilité

Base de données 23.x

Base de données 21.x

Base de données 19.x

Base de données 18.3

Base de données 12.2 et 12.1

JDBC 23.x Oui Oui Oui Non Non
JDBC 21.x Oui Oui Oui Passé Passé
JDBC 19.x Oui Oui Oui Passé Passé
JDBC 18.x Non Passé Passé Passé Passé
JDBC 12.2 et 12.1 Non Passé Passé Passé Passé

    • Quelles sont les versions d'Oracle JDBC par rapport à JDK ?

Version d'Oracle Database

Fichiers jar JDBC propres à la version

23.x

ojdbc17.jar avec JDK17, JDK19,  JDK21 et JDK25 avec prise en charge des API Jakarta


ojdbc11.jar avec JDK11 et JDK21


ojdbc8.jar avec JDK8 et JDK11

21.x

ojdbc11.jar avec JDK11, JDK17, JDK19 et JDK21


ojdbc8.jar avec JDK8 et JDK11

19.x

ojdbc10.jar avec JDK11, JDK17, JDK19 et JDK21 (19.25 et versions supérieures)


ojdbc8.jar avec JDK8, JDK11, JDK17, JDK19 et JDK21 (19.25 et versions supérieures)

18.x ojdbc8.jar avec JDK8 et JDK11
12.2 ou 12cR2 ojdbc8.jar avec JDK 8
12.1 ou 12cR1

ojdbc7.jar avec JDK 7 et JDK 8


ojdbc6.jar avec JDK 6

11.2 ou 11gR2

ojdbc6.jar avec JDK 6, JDK 7 et JDK 8


(Remarque : JDK7 et JDK8 ne sont pris en charge que dans 11.2.0.3 et 11.2.0.4)


ojdbc5.jar avec JDK 5

    • Quelles sont les spécifications JDBC par rapport à Oracle JDBC ?

Version d'Oracle Database

Conformité aux spécifications JDBC

23.x et 21.x

JDBC 4.3 dans ojdbc11.jar


JDBC 4.2 dans ojdbc8.jar

19.x

JDBC 4.3 dans ojdbc10.jar


JDBC 4.2 dans ojdbc8.jar

18.3 JDBC 4.2 dans ojdbc8.jar
12.2 ou 12cR2 JDBC 4.2 dans ojdbc8.jar
12.1 ou 12cR1

JDBC 4.1 dans ojdbc7.jar


JDBC 4.0 dans ojdbc6.jar

11.2 ou 11gR2

JDBC 4.0 dans ojdbc6.jar


JDBC 3.0 dans ojdbc5.jar

Questions supplémentaires spécifiques à la version

    • Les pilotes Oracle JDBC sont-ils certifiés pour OpenJDK ?
    • Quel est le pilote JDBC 19.x recommandé à utiliser avec JDK11 ?
    • Qu'en est-il de la version JDBC qui ne figure pas dans le tableau ci-dessus ?
    • Où puis-je obtenir les fichiers jar JDBC ?
    • À quoi servent les différents fichiers JAR sur la page de téléchargement du pilote JDBC 19.x ?

Oracle JDBC en général

    • Quels sont les différents pilotes JDBC fournis par Oracle ?
    • Quel pilote dois-je utiliser ?
    • Qu'en est-il des fichiers jar pour le pilote léger du serveur et le pilote interne du serveur ?
    • Les fournisseurs tiers peuvent-ils distribuer les pilotes JDBC d'Oracle avec leurs propres logiciels ?
    • Quels sont les droits d'accès requis par les pilotes JDBC Oracle ?

Installation

    • Comment installer le pilote léger ?
    • Comment installer le pilote léger ?
    • Comment installer le pilote interne côté serveur ou le pilote léger dans le pilote du serveur ?

DriverManager et DataSources

    • Quelle est la différence entre DriverManager et DataSource ?
    • Quel pool de connexions dois-je utiliser ?
    • Qu'est-ce que le pool de connexions OCI JDBC ?

Connexions

    • Quelle est la forme d'une URL ?
    • Quelle est la forme de la description ?
    • Comment utiliser l'argument Properties ?
    • Ne dois-je pas inscrire la classe OracleDriver auprès de DriverManager ?
    • Quel nom d'utilisateur et quel mot de passe dois-je utiliser pour me connecter au pilote interne du serveur ?
    • Je reçois l'erreur OutofMemory lorsque je définis une valeur de pré-extraction par défaut plus élevée.
    • Qu'est-ce qu'une chaîne de connexion de service ?
    • Comment me connecter en tant que SYSDBA ou SYSOPER ?
    • Quelles sont les méthodes de cryptage prises en charge par les pilotes JDBC Oracle ?
    • Comment activer le cryptage et la vérification par checksum avec le pilote léger JDBC ?
    • Qu'est-ce que l'authentification par proxy ?
    • Les pilotes JDBC Oracle prennent-ils en charge le SSL ?
    • Les pilotes JDBC Oracle prennent-ils en charge le protocole LDAP dans l'URL de connexion ?
    • Comment utiliser JDBC pour me connecter à un serveur de base de données derrière un pare-feu ?
  • Instructions, PreparedStatements, CallableStatements

    • Qu'est-ce que defineColumnType et quand devrais-je l'utiliser ?
    • defineColumnType force-t-il les conversions sur le serveur ?
    • Comment désactiver EscapeProcessing au niveau du pilote JDBC plutôt que d'appeler stmt.setEscapeProcessing(false) dans le code d'application ?
    • Les pilotes JDBC Oracle ont-ils fourni une fonction Liaison par nom ?
    • Pour les méthodes setXXX dans PreparedStatement, comment les pilotes Oracle JDBC déterminent-ils le type de données ?
    • Que se passe-t-il si le type du paramètre cible est différent du type pris en compte par la méthode setXXX ?
    • Pourquoi les pilotes ne font-ils pas la conversion côté client ?
    • Pour l'insertion dans une colonne d'une table, quels sont les types de données d'octet ?
    • Pour l'insertion dans une colonne d'une table, quels sont les types de données de caractères ?
    • Quelles sont les tailles pour setString, setCharacterStream et setAsciiStream, et les limites pour les données binaires via setBytes et setBinaryStream ?

Formulaire

Instruction

Pilote

Limite inférieure

Limite supérieure

Mécanisme de liaison

Remarque 

Tout Tout Tout 0 0 Valeur nulle
Tout SQL Client 1 caractère 32 766 caractères Ventes
Tout SQL Client 32 767 caractères 2 147 483 647 octets Analyse de
Tout SQL Client 2 147 483 648 octets 2 147 483 647 caractères

CLOB temporaire


CARACTÈRE  
Serveurs 1 caractère 65 536 octets

Ventes


1, 2


NCHAR  
 
1 caractère 4 000 octets

Ventes


NCHAR  
 
4 001 octets 2 147 483 647 caractères

CLOB temporaire


CARACTÈRE  
 
65 537 octets 2 147 483 647 caractères

Analyse de


 
 
 
2 147 483 647 octets 2 147 483 647 caractères

CLOB temporaire


Tout PL/SQL Tout 1 caractère 32 512 caractères Ventes  
Tout PL/SQL Tout 32 512 caractères 2 147 483 647 caractères CLOB temporaire

    • Quelles sont les limites de taille pour les méthodes propriétaires setBytesForBlob et setStringForClob dans oracle.jdbc.OraclePreparedStatement ?

API

FORMULAIRE

Instruction

Pilote

Limite inférieure

Limite supérieure

Mécanisme de liaison

Remarque 

setBytesForBlob

S/O


Tout Tout

0


0


Valeur nulle
 
 
Tout Client 1 octet

2 000 octets


Ventes
 
 
Tout Client 2 001 octets 21 474 836 487 octets BLOB temporaire 2
setStringForClob

Tout


Tout Tout 0 0 Valeur nulle  
 

Tout


Tout Client 1 caractère 32 766 caractères Ventes  
 

Tout


Tout Client 32 766 caractères 2 147 483 647 caractères CLOB temporaire  
 

Tout


Tout Serveurs 1 caractère 4 000 octets Ventes  
 

Tout


Tout Serveurs 4 001 octets 2 147 483 647 caractères CLOB temporaire 1

    • Le changement de type de liaison force-t-il l'analyse supplémentaire de l'instruction côté serveur ?
    • Qu'en est-il des CallableStatements et des procédures avec des paramètres IN OUT ?
    • La sélection des procédures PL/SQL polymorphes change-t-elle lorsque le type de liaison change ?
    • Qu'en est-il du code existant ?
    • Dans certains cas, le pilote crée des LOB temporaires. Est-ce qu'il les suit et les libère ?
    • Nous utilisons un jeu de caractères de largeur variable tel que UTF8. Le pilote corrige-t-il la longueur d'octet réelle d'une séquence de caractères ?
    • Est-ce une bonne idée d'utiliser, par exemple, setString pour une chaîne vraiment énorme ?
    • Les types de colonnes LONG RAW et LONG sont en phase d'abandon. Pourquoi y a-t-il de nouvelles utilisations des API setXXXStream ?
    • Les API LOB sont beaucoup plus flexibles, n'est-ce pas ?
    • Pourquoi ne puis-je pas créer un PreparedStatement qui effectue select * from tab where id in ( ?, ?, ?, ...) ?

ResultSets

    • Que signifie « Exhausted Resultset: prepare_for_new_get » ?
    • Pourquoi dois-je fermer ResultSets ?

Types de données simples

    • Que se passe-t-il avec DATE et TIMESTAMP ?
    • Quelle est la valeur la plus longue que je puisse lier ?

Méthode

Type de colonne

Longueur maximale

setBytes LONG

4 Ko


setBytes LONG RAW

2 Go


setString LONG

32 000 caractères(SetBigStringTryClob="false")
4 000 caractères (SetBigStringTryClob="true")


setString

CLOB


Caractères 2G


    • Pourquoi le résultat de la lecture d'un TIMESTAMP WITH TIME ZONE est-il différent ?

Types de données avancés (objets)

    • Comment créer des instances d'ADT ?
    • Pourquoi la méthode de fabrique standard createArrayOf n'est-elle pas prise en charge ?

Fichiers BFILE, BLOB, CLOB

    • Quelle est la fonction de DBMS_LOB.ERASE ?
    • Puis-je utiliser oracle.sql.CLOB.putChars() ?
    • OCI fournit une fonction permettant de manipuler un objet CLOB CharSetId. Quel est l'équivalent JDBC ?
    • L'écriture dans BLOBS est-elle plus lente que l'insertion de LONG RAW ?
    • Pourquoi une erreur ORA-03127 s'affiche-t-elle lors de l'obtention de LobLength dans l'exemple de code Stream ?
    • Lorsque j'obtiens un CLOB à partir de la base de données et que je le mets à jour, certaines modifications n'apparaissent pas dans la base de données. Pourquoi ?

Types REF

    • Comment transmettre un élément oracle.sql.REF entre deux clients JDBC différents (EJB, clients JDBC, etc.) ? En effet, la classe REF n'est pas sérialisable.
    • Comment créer un nouveau REF ?

Types OPAQUE

    • Que sont les types OPAQUE ?

Sources de ligne

    • Lorsque je définis l'attribut de défilement après exécution, il n'a aucun effet sur la défilabilité de RowSet. Pourquoi ?
    • Puis-je sérialiser l'objet RowSet vers un fichier plat même si RowSet contient des flux ?

Pilote léger

    • Le pilote léger JDBC peut-il être utilisé pour développer des applications Java ?

Pilote interne du serveur

    • Quand dois-je utiliser le pilote interne du serveur ?

Pilote léger du serveur

    • Quand dois-je utiliser le pilote léger du serveur ?

Erreurs

    • DriverManager.getConnection indique l'erreur : « Aucun pilote approprié »
    • Message d'erreur : « UnsatisfiedLinkError avec le pilote OCI »
    • Message d'erreur : « ORA-1019 : impossible d'allouer de la mémoire ».
    • Message d'erreur : « ORA-01000 : maximum de curseurs ouverts dépassé »
    • Message d'erreur : « ORA-01002 : extraction hors séquence »
    • Message d'erreur : « ORA-12705 : valeur de paramètre NLS non valide ou inconnue spécifiée »
    • Erreur lors de la tentative de récupération du texte pour l'erreur ORA-12705.
    • Message d'erreur : le pilote léger JDBC crée des erreurs « caractères non valides » pour les littéraux Unicode
    • Les opérations INSERT ou UPDATE sont lentes
    • Message d'erreur : « Connexion réinitialisée par le pair »
    • Que signifie « violation de protocole » ?

Programmes de démonstration

    • Existe-t-il des programmes de démonstration JDBC ?
    • Comment exécuter les démos ?
    • Que dois-je faire si une erreur s'affiche lorsque j'exécute une démonstration ?

Oracle JDBC Trace Facility

    • Qu'est-ce que JDBC Trace Facility ?
    • Comment activer l'ancienne trace JDBC ?
    • Comment contrôler le volume de la sortie de trace ?
    • Où va la sortie de trace ?
    • Comment désactiver DMS dans un fichier JAR compatible DMS ?

Outils et environnements de développement

    • Puis-je déboguer des programmes JDBC avec Symantec Visual Cafe ?
    • Puis-je déboguer des programmes JDBC avec Visual J++ de Microsoft ?

Fonctions prises en charge

    • Les pilotes JDBC peuvent-ils accéder aux procédures stockées PL/SQL ?
    • Les pilotes JDBC prennent-ils en charge la transmission en continu ?
    • Les pilotes JDBC prennent-ils en charge les jeux de caractères multioctets ?
    • Les pilotes JDBC fonctionnent-ils avec les pare-feu ?
    • Les pilotes JDBC d'Oracle prennent-ils en charge les tables/ensembles de résultats/enregistrements/booléens PL/SQL ?
    • Le basculement est-il pris en charge ?
    • Comment les pilotes JDBC prennent-ils en charge les types de données Oracle ROWID ? Quel est le rapport avec getCursorName et setCursorName ?
    • Comment les pilotes JDBC prennent-ils en charge les types de données Oracle REFCURSOR ?
    • ANO fonctionne-t-il avec les pilotes JDBC ?
    • Puis-je sérialiser les types de données oracle.sql.* ?
    • Les pilotes JDBC prennent-ils en charge les objets ou les collections ?
    • Puis-je utiliser WaitOption et AutoRollback ?
    • Une procédure stockée Java dans une instance de base de données peut-elle ouvrir une connexion à une autre instance de base de données ?

Performances

    • Quel est le plus rapide, le pilote léger ou le pilote OCI ?
    • Lequel est plus rapide, Statements ou PreparedStatements ?

java.util.logging

    • Comment utiliser java.util.logging pour obtenir la sortie de trace des pilotes JDBC Oracle ?
    • Comment configurer java.util.logging pour obtenir une sortie de trace utile à partir d'Oracle JDBC ?
    • Qu'en est-il du pilote interne côté serveur ?