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

89

Co jest nie tak z kodem? Podczas debugowania jest dużo błędów. Piszę kod dla klasy singleton, aby połączyć się z bazą danych mysql.

Oto mój kod

package com.glomindz.mercuri.util;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;

public class MySingleTon {
    String url = "jdbc:mysql://localhost:3306/";
    String dbName = "test";
    String driver = "com.mysql.jdbc.Driver";
    String userName = "root";
    String password = "";

    private static MySingleTon myObj;   
    private Connection Con ;
    private MySingleTon() {
        System.out.println("Hello");
        Con= createConnection();
    }

    @SuppressWarnings("rawtypes")
    public Connection createConnection() {
        Connection connection = null;
        try {
            // Load the JDBC driver
            Class driver_class = Class.forName(driver);
            Driver driver = (Driver) driver_class.newInstance();
            DriverManager.registerDriver(driver);
            connection = DriverManager.getConnection(url + dbName);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
        return connection;
    }

    /**
     * Create a static method to get instance.
     */
    public static MySingleTon getInstance() {
        if (myObj == null) {
            myObj = new MySingleTon();
        }
        return myObj;
    }

    public static void main(String a[]) {
        MySingleTon st = MySingleTon.getInstance();
    }
}

Jestem nowy w Javie. Proszę pomóż.

atikul hussain
źródło
2
Czy słoik kierowcy znajduje się w Twojej ścieżce klas?
NINCOMPOOP
upewnij się, że zsynchronizowałeś swoje getInstance ()
Siddharth
Możliwy duplikat klasy ClassNotFoundException com.mysql.jdbc.Driver
pathikrit
1
Musisz wkleić plik jar do katalogu lib serwera WWW, jeśli otrzymujesz błąd w czasie wykonywania. mając na uwadze, że jeśli otrzymujesz błąd w czasie kompilacji, dodaj jar w ścieżce kompilacji.
djangodude

Odpowiedzi:

124

Wygląda na to, że projekt nie zawiera biblioteki połączeń mysql . Rozwiąż problem, korzystając z jednego z proponowanych rozwiązań:

  • ROZWIĄZANIE MAVEN PROJECTS

Dodaj zależność mysql-connector do pliku projektu pom.xml:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.39</version>
</dependency>

Oto wszystkie wersje: https://mvnrepository.com/artifact/mysql/mysql-connector-java

  • ROZWIĄZANIE WSZYSTKICH PROJEKTÓW

Dodaj ręcznie bibliotekę jar do projektu.

Kliknij prawym przyciskiem myszy projekt -> ścieżka kompilacji -> skonfiguruj ścieżkę kompilacji

W Libraries Tab prasie Add External Jar i Selecttwoim słoiku.

Możesz znaleźć zip dla mysql-connector tutaj

  • Wyjaśnienie:

Podczas budowania projektu java zgłasza wyjątek, ponieważ plik (klasa com.mysql.jdbc.Driver) z biblioteki połączeń mysql nie został znaleziony. Rozwiązaniem jest dodanie biblioteki do projektu, a java znajdzie sterownik com.mysql.jdbc.Driver

R9J
źródło
7
A co, jeśli nie używamy żadnego IDE i po prostu działamy na naszym terminalu? Jak więc sobie z tym poradzić?
Achyuta Aich
2
Problem nie zostanie rozwiązany, dopóki nie dodasz mysql-connector-java-8.0.15.jarpliku do apache-tomcat-9.0.16\libfolderu, zgodnie z sugestią @Asad.
SWETA KESUR
53

Jeśli masz błąd w swoim IDE (błąd kompilacji), musisz dodać plik jar mysql-connector do swoich bibliotek i dodać go również do biblioteki projektu, do której się odwołujesz.

Jeśli pojawi się ten błąd podczas uruchamiania, prawdopodobnie jest to spowodowane tym, że nie dołączyłeś pliku JAR mysql-connector do folderu lib serwera internetowego.

Dodaj mysql-connector-java-5.1.25-bin.jardo swojej ścieżki klas, a także do katalogu lib na serwerze internetowym. Jako przykład podano ścieżkę do biblioteki TomcatTomcat 6.0\lib

Asad
źródło
1
A co, jeśli nie używamy żadnego IDE i po prostu działamy na naszym terminalu? Jak więc sobie z tym poradzić?
Achyuta Aich
jeśli nie używasz żadnego IDE, powinieneś dodać ścieżkę do pliku jar do swojej ścieżki klas
Asad
2
Dodanie do serwera lib jest ważną kwestią, na którą należy zwrócić uwagę, dzięki zadziałało dla mnie
Chandra_S
14

W przypadku projektów opartych na Gradle potrzebujesz zależności od MySQL Java Connector :

dependencies {
    compile 'mysql:mysql-connector-java:6.0.+'
}
naXa
źródło
To, co skończyło się dla mnie pracą, to runtime 'mysql:mysql-connector-java:6.0.+'.
itsmichaelwang
12

Każdy napisał odpowiedź, ale nadal jestem zaskoczony, że nikt tak naprawdę nie odpowiedział, korzystając z najprostszego sposobu.
Ludzie odpowiadają, że dołączają plik jar. Ale błąd nadal będzie występował.

Przyczyną tego jest to, że jar nie jest wdrażany podczas uruchamiania projektu. Musimy więc powiedzieć IDE, aby również wdrożył ten jar.

Ludzie tutaj odpowiadali tyle razy, że umieścili ten plik jar w folderze lib w WEB-INF. Wydaje się w porządku, ale po co robić to ręcznie. Jest prosty sposób. Sprawdź poniższe kroki:

Krok 1: Jeśli nie odwołałeś się do pliku jar w projekcie, odwołaj się do niego w ten sposób.

Kliknij prawym przyciskiem myszy projekt i przejdź do właściwości projektu. Następnie przejdź do ścieżki budowania java, a następnie dodaj przez nią zewnętrzny plik jar.

Ale to nadal nie rozwiąże problemu, ponieważ dodanie zewnętrznego jar za pomocą ścieżki budowania pomaga tylko w kompilacji klas, a jar nie zostanie wdrożony po uruchomieniu projektu. W tym celu wykonaj ten krok

Kliknij prawym przyciskiem myszy projekt i przejdź do właściwości projektu. Następnie przejdź do zestawu wdrażania, a następnie naciśnij przycisk Dodaj , a następnie przejdź do wpisów ścieżki budowania java i dodaj swoje biblioteki, niezależnie od tego, czy jest to jstl, mysql, czy jakikolwiek inny plik jar. dodaj je do wdrożenia. Poniżej znajdują się dwa zdjęcia, które go wyświetlają.

Przed dodaniem

Po dodaniu

Tahir Hussain Mir
źródło
Dzięki stary. To się udało. Dlaczego inni o tym nie wspominali, może dlatego, że jest to rozwiązanie tylko dla dynamicznej aplikacji internetowej korzystającej z Eclipse
Sayka
@sayka yeah, tak może być.
Tahir Hussain Mir
11

Będziesz musiał dołączyć jar sterownika dla MySQL MySQL Connector Jar w swojej ścieżce klas.

Jeśli używasz Eclipse: jak dodać biblioteki zależne w Eclipse

Jeśli używasz wiersza poleceń, podaj ścieżkę do pliku jar sterownika, używając parametru -cp pliku java.

java -cp C:\lib\* Main
Narendra Pathai
źródło
A co, jeśli nie używamy żadnego IDE i po prostu działamy na naszym terminalu? Jak więc sobie z tym poradzić?
Achyuta Aich
1
Używanie -cpdaje Nie można znaleźć lub załadować błędu klasy głównej. Czy muszę umieścić klasę główną w innym folderze?
zygimantus
11

sprawdź słoik (mysql-connector-java-bin)w swojej ścieżce klas do pobrania stąd

KhAn SaAb
źródło
8

JDBC API składa się głównie z interfejsów, które działają niezależnie od jakiejkolwiek bazy danych. Dla każdej bazy danych, która implementuje interfejs API JDBC, wymagany jest sterownik specyficzny dla bazy danych.

Najpierw pobierz jar złącza MySQL ze strony www.mysql.com, a następnie:

Right Click the project -- > build path -- > configure build path

W zakładce Biblioteki naciśnij Add External Jari wybierz swój słoik.

Sathish SR
źródło
3

W przypadku projektów opartych na Maven potrzebujesz zależności.

<dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
</dependency>
tomtomssi
źródło
2
Dlaczego PostgreSQL? Pytanie dotyczy MySQL.
naXa
Zredagowałem odpowiedź, aby pasowała do pytania
tomtomssi
2

W projekcie do folderu Biblioteki -> kliknij prawym przyciskiem myszy -> Dodaj bibliotekę -> Mysqlconnector 5.1

Kika_Fortez
źródło
2

Złącze sterownika nie znajduje się na ścieżce kompilacji. Skonfiguruj ścieżkę kompilacji i wskaż ją na „mysql-connector-java-5.1.25-bin.jar” (sprawdź wersję, której używasz). Alternatywnie możesz użyć maven: D

shikjohari
źródło
1

Choć może się to wydawać banalne w moim przypadku, projekt maven w wersji netbeans 7.2.1 był inny. W projekcie znajduje się folder o nazwie zależności. Kliknij prawym przyciskiem myszy, a następnie wyświetli się wyskakujące okienko, w którym możesz wyszukać pakiety. W obszarze zapytania wstaw

mysql-connector

Przywoła dopasowania (wydaje się, że robi to z jakimś repozytorium). Kliknij dwukrotnie, a następnie zainstaluj.

Paweł
źródło
1

Dzieje się tak, ponieważ folder WEB-INF nie istnieje w lokalizacji w podkatalogu, w którym wystąpił błąd. Możesz skompilować aplikację, aby użyć folderu WEB-INF w public_html LUB skopiować folder WEB-INF do podfolderu, jak w powyższym błędzie.

MilesWeb
źródło
1

W przypadku IntelliJ Idea przejdź do struktury projektu (plik, struktura projektu) i dodaj plik .jar łącznika mysql do swojej biblioteki globalnej. Tam kliknij prawym przyciskiem myszy i wybierz „Dodaj do modułów”. Naciśnij Zastosuj / OK i powinieneś być gotowy.

Michael Sims
źródło
0

Wyjątek może również wystąpić, ponieważ ścieżka klasy nie została zdefiniowana.

Po godzinach poszukiwań i dosłownie przeglądaniu setek stron problem polegał na tym, że ścieżka klasowa biblioteki nie została zdefiniowana.

Ustaw ścieżkę klasy w następujący sposób na komputerze z systemem Windows

set classpath=path\to\your\jdbc\jar\file;.
Szorstki
źródło
0

Jeśli używasz tomcat, to wraz z katalogiem projektu należy również skopiować plik jar konektora bazy danych do tomcat / lib. to działało dla mnie

Santosh Kadam
źródło
0

Musi być używany od 2020 r

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.18</version>
    </dependency>
SuperEye
źródło
0

Tworzę prostą aplikację JavaFX11 z SQLite Database w Eclipse IDE . Aby wygenerować raport, dodałem słoiki Jasper. Nagle wyrzuca błąd „TO” .

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

Działał dobrze (PRZED TYM DODATKIEM). Ale nagle!

Nie używam mavena ani innych menedżerów do tej prostej aplikacji. Dodaje słoiki ręcznie.

Utworzyłem „Bibliotekę użytkownika” i dodałem moje słoiki z zewnętrznych folderów.

OBSZAR WYSTĘPUJĄCY PROBLEM: Moja „Biblioteka użytkownika” jest oznaczona jako biblioteka systemowa. Właśnie usunąłem oznaczenie. Teraz nie jest to biblioteka systemowa. „TERAZ MÓJ PROJEKT DZIAŁA DOBRZE”.

DEBUG SAM: Próbowałem innych rzeczy: PRZY URUCHOMIENIU KONFIGURACJA: Spróbuj usunąć bibliotekę i dodać słoiki jeden po drugim i zobacz. - tutaj musisz usunąć wszystkie słoiki jeden po drugim, nie ma zaznaczania wszystkich i usuwania w zaćmieniu teraz w konfiguracji uruchamiania. Więc komunikaty o błędach zmieniają się z jednego słoika na drugi.

Mam nadzieję, że to komuś pomoże.

Sudhakar Krishnan
źródło