Come installare il driver JDBC nel progetto Web Eclipse senza affrontare java.lang.ClassNotFoundexception

C’è una domanda MOLTO simile alla mia, ma nel mio caso non ho giare duplicati nel mio percorso di build, quindi la soluzione non funziona per me. Ho cercato google per un paio d’ore, ma nessuna delle soluzioni che ho trovato in realtà risolve il mio problema. Sto creando un sito Web con alcune connessioni di database per i compiti. Sto usando un database MySQL, lo sviluppo in Eclipse e in esecuzione su Windows.

Continuo a ricevere java.lang.ClassNotFoundException: com.mysql.jdbc.Driver con il seguente codice:

 import java.sql.*; //... public void someMethodInMyServlet(PrintWriter out) { Connection connection = null; PreparedStatement query = null; try { out.println("Create the driver instance.
"); Class.forName("com.mysql.jdbc.Driver").newInstance(); out.println("Get the connection.
"); connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "secret"); query = connection.prepareStatement( "SELECT * FROM customers"); //... } catch (Exception e) { out.println(e.toString()+"
"); } } //...

Quando eseguo il codice sopra riportato ottengo il seguente risultato:

 Create the driver instance. java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 

Non supera la linea Class.forName... e non riesco a capire perché! Ecco cosa ho fatto:

  1. Scarica mysql-connector.
  2. Inseriscilo nella mia cartella MySQL C:\Program Files\MySQL\mysql-connector-java-5.1.12\mysql-connector-java-5.1.12-bin.jar .
  3. Aperte le proprietà del progetto in Eclipse.
  4. Aggiungi Jar esterno al mio percorso di creazione e ho selezionato mysql-connector-java-5.1.12-bin.jar .

Ogni volta che provo ad usare il servlet ottengo lo stesso errore indipendentemente se ho il barattolo lì dentro o se non lo faccio. Potresti aiutarmi a capirlo?

Come per ogni libreria “di terze parti” in un file JAR che deve essere utilizzato dalla webapp, basta copiare / rilasciare il file JAR fisico in webapp’s /WEB-INF/lib . Sarà quindi disponibile nel classpath predefinito di webapp. Inoltre, Eclipse è abbastanza intelligente da notarlo. Non c’è bisogno di problemi con il percorso di costruzione. Tuttavia, assicurati di rimuovere tutti i riferimenti non necessari che hai aggiunto prima, altrimenti potrebbe scontrarsi.

Un’alternativa è installarla nel server stesso facendo cadere il file JAR fisico nella cartella /lib del server. È necessario quando si utilizza l’origine dati del pool di connessione JDBC fornita dal server, che a sua volta richiede il driver JDBC MySQL.

Guarda anche:

  • Come aggiungere librerie JAR al progetto WAR senza affrontare java.lang.ClassNotFoundException? Classpath vs Build Path vs / WEB-INF / lib
  • Come devo connettermi al database JDBC / origine dati in un’applicazione basata su servlet?
  • Dove devo posizionare il driver JDBC per il pool di connessione di Tomcat?
  • JDBC CLASSPATH non funziona

Dal momento che lo stai eseguendo in servlet , devi avere il barattolo accessibile dal contenitore del servlet . È ansible includere il connettore come parte del war dell’applicazione o inserirlo come parte della libreria estesa del contenitore del servlet e delle risorse di gestione delle origini dati, se disponibile. La seconda parte dipende totalmente dal contenitore che hai.

Gli altri hanno ragione nel rendere il driver JAR disponibile per il proprio contenitore servlet. Il mio commento intendeva suggerire di verificare dalla riga di comando se il driver stesso è intatto.

Piuttosto che un main() vuoto main() , prova qualcosa di simile, adattato dalla documentazione inclusa:

 public class LoadDriver { public static void main(String[] args) throws Exception { Class.forName("com.mysql.jdbc.Driver"); } } 

Sulla mia piattaforma, farei questo:

 $ ls mysql-connector-java-5.1.12-bin.jar 
 mysql-connector-java-5.1.12-bin.jar
 $ javac LoadDriver.java 
 $ java -cp mysql-connector-java-5.1.12-bin.jar :.  LoadDriver

Sulla tua piattaforma, devi usare ; come separatore del percorso, come discusso qui e qui .

Inserire mysql-connector-java-5.1.6-bin.jar nella cartella \ Apache Tomcat 6.0.18 \ lib. Il tuo problema sarà risolto.

Segui questi passaggi:

1) Installa eclipse
2) Importa Apache in eclipse
3) Installa mysql
4) Scarica mysqlconnector / J
5) Decomprimere il file compresso per navigare attraverso di esso fino a quando non si ottiene il file bin in esso. Quindi posizionare tutti i file presenti nella cartella contenente il cestino in C: \ Programmi \ mysql \ mysql server5.1 / quindi fornire lo stesso percorso dell’indirizzo durante la definizione del driver in eclipse.

È tutto molto facile ragazzi.

Cosa non dovresti fare (specialmente quando lavori su un progetto condiviso)

Ok, dopo aver avuto lo stesso problema e dopo aver letto alcune risposte qui e in altri posti. sembra che mettere external lib in WEB-INF/lib non sia una buona idea in quanto pollute webapp/JRE libs with server-specific libraries – per maggiori informazioni controlla questa risposta ”

Un’altra soluzione che NON raccomando è: copiarla nella cartella tomcat / lib . sebbene questo possa funzionare, sarà difficile gestire la dipendenza per un progetto condiviso (git ad esempio).

Buona soluzione 1

Crea una cartella del vendor . metti lì tutta la tua lib esterna. quindi, mappare questa cartella come dipendenza dal progetto. in eclipse è necessario

  1. aggiungi la tua cartella al build path
    1. Project Properties -> Java build path
    2. Libraries -> aggiungi lib esterna o qualsiasi altra soluzione per aggiungere i tuoi file / cartella
  2. aggiungi il tuo percorso di build deployment Assembly ( riferimento )
    1. Project Properties -> Deployment Assembly
    2. Add -> Java Build Path Entries
    3. Ora dovresti vedere l’elenco di librerie sul tuo percorso di build che puoi specificare per l’inclusione nel tuo WAR finito.
    4. Seleziona quelli che vuoi e premi Finish.

Buona soluzione 2

Utilizza maven (o qualsiasi altra alternativa) per gestire la dipendenza del progetto

Se il problema persiste,

Metti il ​​jar mysql-connector-java-5.0.8-bin in una posizione all’interno della tua cartella Tomcat-> lib-> (non importa dove hai installato Tomcat). E cambia la tua variabile ambientale (Fatto facendo clic su Proprietà di Mycomputer – Impostazioni avanzate del sistema- Variabili ambientali- E imposta un nuovo nome e valori variabili come luogo in cui risiede il tuo file lib. Non dimenticare di inserire un; alla fine del percorso )

Se il problema persiste, prova a scaricare commons-collections-2.0.jar ( http://www.docjar.com/jar_detail/commons-collections-2.0.jar.html ) e incolla il barattolo nello stesso posto in cui risiede il tuo jar mysql ( cioè) all’interno di Tomcat-lib.

Pulisci il tuo progetto-Ferma il tuo server- Finalmente prova a correre.

Molte volte ho avuto questo problema, ho sperimentato ClassNotFoundException. se il barattolo non si trova nella posizione fisica.

Quindi assicurati di file .jar (connettore mysql) nella posizione fisica della cartella lib WEB-INF. e assicurati di riavviare Tomcat usando il comando shutdown in cmd. dovrebbe funzionare.

L’unica soluzione ha funzionato per me sta mettendo il file .jar sotto WEB-INF / lib. Spero che questo ti sia d’aiuto.

supponendo che il tuo progetto sia basato su Maven, aggiungilo al tuo POM:

   mysql mysql-connector-java 5.1.26  

Salva> Crea> e verifica nuovamente la connessione. Funziona! La tua attuale versione del connettore java mysql può variare.

Metti mysql-connector-java-5.1.38-bin.jar nella cartella C: \ Programmi \ Apache Software Foundation \ Tomcat 7.0 \ lib folder.by facendo questo programma con execute

 Right click on the Project, go to Properties. Choose Deployment Assembly (if not found, read the update part) from the left pane. Check if Java Build Path Entries are provided. If not, click on Add and include it. If it is already present, click Add to include your connector jar as Archive. Do a Project>Clean, restart your Server. 

per questo errore:

 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 

devi:

 Import java.sql.*; Import com.mysql.jdbc.Driver; 

anche se non è utilizzato fino all’app in esecuzione.