web-dev-qa-db-fra.com

Suppression de JDBC ODBC bridge in Java 8

À partir de Java 8, le pont JDBC-ODBC ne sera plus inclus avec le JDK.

Class.forName("Sun.jdbc.odbc.JdbcOdbcDriver"); // classNotFoundException is thrown

Existe-t-il une autre solution pour connecter le pont JDBC-ODBC?

33
Karthik

Nous pouvons toujours utiliser JDBC-ODBC Bridge dans Java 8 aussi, suivez simplement cette recette simple:

  1. Téléchargez un JDK 7 ou JRE 7.
  2. Aller au dossier JRE\lib et trouver le rt.jar
  3. Décompressez-le (si vous avez installé WinRAR ou 7Zip) ou renommez-le en rt.Zip et décompressez-le.
  4. Copiez les dossiers Sun\jdbc et Sun\security\action, conservez la structure des dossiers. c'est-à-dire que vous devriez avoir la structure de dossiers comme ci-dessous:

    Sun --> Security --> Action
        --> JDBC
    
  5. Ouvrez une fenêtre CMD. Accédez au dossier parent du dossier Sun. Exécutez la commande: jar -cvf jdbc.jar Sun

  6. La commande ci-dessus créera un fichier nommé jdbc.jar
  7. Copiez JDBC.jar dans votre dossier JDK8 ou JRE8 lib. Si cela ne fonctionne pas, essayez le lib\ext dossier.
  8. Copiez jdbcodbc.dll de JRE\bin de votre installation JRE 7 vers JRE\bin de votre installation JRE 8.
  9. Redémarrez votre JVM.

Comment activer le pont JDBC-ODBC pour JDK 8

23
frhack

Eh bien, à mon avis cette entrée de blog par un employé d'Oracle dit tout:

Je vous recommande d'utiliser un pilote JDBC fourni par le fournisseur de votre base de données ou un pilote JDBC commercial au lieu du pont JDBC-ODBC.

Pour quel type d'application utilisez-vous le pont JDBC-ODBC?

  • S'il s'agit d'un code de production, vous devez à mon humble avis remplacer le pont par un vrai pilote et la base de données héritée par un vrai dès que possible
  • S'il s'agit d'un code de test qui interagit avec une base de données Access, une feuille de calcul Excel ou tout ce à quoi vous pouvez accéder via ODBC, essayez de le remplacer par une base de données pure Java comme H2
  • Si vous l'utilisez pour un accès ad hoc aux bases de données Access héritées à des fins, par exemple, de développement et/ou d'analyse, et que vous ne pouvez ou ne voulez vraiment rien mettre à jour, vous pouvez vous en tenir à un JDK 7 pendant un certain temps jusqu'à sa date de fin de vie et probablement bien au-delà
15
Robert Petermeier

Existe-t-il une autre solution pour connecter le pont JDBC-ODBC?

Sun et Oracle positions officielles ont longtemps été que -

le pont JDBC-ODBC [intégré à la JVM] doit être considéré comme une solution de transition [...] Oracle ne prend pas en charge le pont JDBC-ODBC.

Cependant, mon employeur, OpenLink Software , a produit des ponts commerciaux de type 1 entre JDBC et ODBC depuis JVM 1.0, et ceux-ci sont entièrement compatibles avec la JVM actuelle 1.8. Vous pouvez en savoir plus ici -

11
TallTed

J'ai trouvé une solution raisonnable qui permet d'utiliser le code existant avec un changement uniquement pour ouvrir la logique de connexion à la base de données.

UCanAccess est un pilote JDBC open source.

http://ucanaccess.sourceforge.net/site.html

Cela a deux dépendances, dont l'une a deux autres dépendances.

jackcess-2.0.0.jar ou version ultérieure

commons-lang-2.4.jar

commons-logging-1.0.4.jar

hsqldb.jar (2.2.5)

Ce sont tous des logiciels libres. Effectuez une recherche sur Internet, téléchargez, décompressez si nécessaire et placez les quatre bocaux plus celui d'UCanAccess dans un répertoire de votre projet (par exemple JDBC-to-MSAccess). Si vous utilisez Ecplise, ajoutez à votre chemin de génération en choisissant dans le menu "Projet/Propriétés/Java Compilateur/Bibliothèques/Ajouter des fichiers JAR externes") et sélectionnez les cinq fichiers jar.

La logique de connexion est vraiment simple:


String strConnectionString = "";
Connection conAdministrator = null;

// Register driver
Class.forName( "net.ucanaccess.jdbc.UcanaccessDriver" );

// System.getProperty( "user.dir" ) => Current working directory from where application was started

strConnectionString = "jdbc:ucanaccess://" + System.getProperty( "user.dir" )  + "\\Your-database-name.<mdb or accdb>";

// Open a connection to the database
conAdministrator = DriverManager.getConnection( strConnectionString );
10
Outlier

Je sais que cette question a reçu une réponse depuis longtemps, mais je voulais souligner le lien de suite de DataDirect. Dans ce blog https://www.progress.com/blogs/jdbc-odbc-bridge-replacement-yields-performance-boost l'auteur explique comment leur pont peut générer une amélioration des performances de 310%. La version d'essai du pont peut être téléchargée ici: https://www.progress.com/jdbc/sequelink

0
user6641561

Robert Petermeier a donné un bon point Les lecteurs H2 prennent en charge ODBC via le pilote PostgreSQL, et vous pouvez installer le pilote en conséquence le lien depuis Stackoverflow Configuration de PostgreSQL ODBC = sous Windows

0
Singagirl