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


89

Có gì sai với mã có rất nhiều lỗi trong khi gỡ lỗi. Tôi đang viết mã cho một lớp singleton để kết nối với cơ sở dữ liệu mysql.

Đây là mã của tôi

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();
    }
}

Tôi mới sử dụng java. Xin vui lòng giúp đỡ.


2
Driver jar có trong classpath của bạn không?
NINCOMPOOP

đảm bảo rằng bạn đã đồng bộ trên getInstance () của bạn
Siddharth


1
Bạn cần dán tệp jar vào thư mục lib của máy chủ web, nếu bạn gặp lỗi trong thời gian chạy. ngược lại, nếu bạn gặp lỗi về thời gian biên dịch, hãy thêm jar trong đường dẫn xây dựng.
djangodude

Câu trả lời:


124

Có vẻ như thư viện kết nối mysql không được bao gồm trong dự án. Giải quyết vấn đề theo một trong các giải pháp được đề xuất:

  • GIẢI PHÁP DỰ ÁN MAVEN

Thêm phụ thuộc trình kết nối mysql vào tệp dự án pom.xml:

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

Đây là tất cả các phiên bản của bạn: https://mvnrepository.com/artifact/mysql/mysql-connector-java

  • GIẢI PHÁP TẤT CẢ CÁC DỰ ÁN

Thêm thủ công thư viện jar vào dự án.

Nhấp chuột phải vào dự án -> đường dẫn xây dựng -> cấu hình đường dẫn xây dựng

Trong Libraries Tab báo chí Add External JarSelectbình của bạn.

Bạn có thể tìm thấy zip cho mysql-connector tại đây

  • Giải trình:

Khi xây dựng dự án, java ném cho bạn một ngoại lệ vì không tìm thấy tệp (lớp com.mysql.jdbc.Driver) từ thư viện kết nối mysql. Giải pháp là thêm thư viện vào dự án và java sẽ tìm thấy com.mysql.jdbc.Driver


7
Điều gì sẽ xảy ra nếu chúng ta không sử dụng bất kỳ IDE nào và chỉ chạy trên thiết bị đầu cuối của mình? Sau đó, làm thế nào để đối phó với vấn đề này?
Achyuta Aich

2
Sự cố sẽ không được giải quyết cho đến khi bạn thêm mysql-connector-java-8.0.15.jartệp vào apache-tomcat-9.0.16\libthư mục, theo đề xuất của @Asad.
SWETA KESUR

53

Nếu bạn gặp lỗi trong IDE của mình (lỗi thời gian biên dịch), bạn cần thêm tệp jar mysql-connector vào libs của mình và thêm tệp này vào thư viện dự án được tham chiếu của bạn.

Nếu bạn gặp lỗi này khi đang chạy nó, thì có thể là do bạn chưa đưa tệp JAR của mysql-connector vào thư mục lib của máy chủ web của bạn.

Thêm mysql-connector-java-5.1.25-bin.jarvào classpath của bạn và cả vào thư mục lib của máy chủ web của bạn. Đường dẫn Tomcat lib được đưa ra làm ví dụTomcat 6.0\lib


1
Điều gì sẽ xảy ra nếu chúng ta không sử dụng bất kỳ IDE nào và chỉ chạy trên thiết bị đầu cuối của mình? Sau đó, làm thế nào để đối phó với vấn đề này?
Achyuta Aich

nếu bạn không sử dụng bất kỳ IDE nào thì bạn nên thêm đường dẫn tệp jar vào classpath của mình
Asad

2
Thêm vào máy chủ lib là điểm quan trọng cần lưu ý ở đây, nhờ làm việc cho tôi
Chandra_S

14

Đối với các dự án dựa trên Gradle, bạn cần phụ thuộc vào MySQL Java Connector :

dependencies {
    compile 'mysql:mysql-connector-java:6.0.+'
}

Những gì cuối cùng làm việc cho tôi là runtime 'mysql:mysql-connector-java:6.0.+'.
itmichaelwang

12

Mọi người đã viết một câu trả lời nhưng tôi vẫn ngạc nhiên rằng không ai thực sự trả lời nó bằng cách sử dụng cách đơn giản nhất.
Mọi người trả lời rằng bao gồm tệp jar. Tuy nhiên, lỗi vẫn sẽ xảy ra.

Lý do cho điều đó là, jar không được triển khai khi dự án được chạy. Vì vậy, những gì chúng ta cần làm là yêu cầu IDE triển khai jar này.

Những người ở đây đã trả lời rất nhiều lần rằng đã đặt tệp jar đó vào thư mục lib của WEB-INF. Điều đó có vẻ ổn, nhưng tại sao lại làm theo cách thủ công. Có một cách đơn giản. Kiểm tra các bước dưới đây:

Bước 1: Nếu bạn chưa tham chiếu tệp jar vào dự án thì hãy tham chiếu nó như thế này.

Nhấp chuột phải vào dự án và chuyển đến thuộc tính của dự án. Sau đó, đi đến đường dẫn xây dựng java, sau đó thêm tệp jar bên ngoài thông qua đó.

Nhưng điều này vẫn sẽ không giải quyết được vấn đề vì việc thêm jar bên ngoài thông qua đường dẫn xây dựng chỉ giúp biên dịch các lớp và jar sẽ không được triển khai khi bạn chạy dự án. Đối với điều đó, hãy làm theo bước này

Nhấp chuột phải vào dự án và chuyển đến thuộc tính của dự án. Sau đó, đi tới Triển khai Assembly rồi nhấn Thêm , sau đó đi tới các mục đường dẫn xây dựng java và thêm thư viện của bạn cho dù đó là jstl, mysql hay bất kỳ tệp jar nào khác. thêm chúng vào triển khai. Dưới đây là hai hình ảnh hiển thị nó.

Trước khi thêm

Sau khi thêm


Cảm ơn anh bạn. Điều đó đã hiệu quả. Tại sao những người khác đã không được đề cập này có lẽ bởi vì đây là một giải pháp cho chỉ ứng dụng web động sử dụng Eclipse
Sayka

@sayka vâng, đó có thể là trường hợp.
Tahir Hussain Mir

11

Bạn sẽ phải bao gồm jar trình điều khiển cho MySQL MySQL Connector Jar trong classpath của bạn.

Nếu bạn đang sử dụng Eclipse: Cách thêm các thư viện phụ thuộc vào Eclipse

Nếu bạn đang sử dụng dòng lệnh, hãy bao gồm đường dẫn đến trình điều khiển jar bằng tham số -cp của java.

java -cp C:\lib\* Main

Điều gì sẽ xảy ra nếu chúng ta không sử dụng bất kỳ IDE nào và chỉ chạy trên thiết bị đầu cuối của mình? Sau đó, làm thế nào để đối phó với vấn đề này?
Achyuta Aich

1
Sử dụng -cpcho Không thể tìm thấy hoặc tải lỗi lớp chính. Tôi có cần đặt lớp Chính vào một thư mục khác không?
zygimantus 19/09/17


8

API JDBC chủ yếu bao gồm các giao diện hoạt động độc lập với bất kỳ cơ sở dữ liệu nào. Cần có trình điều khiển cơ sở dữ liệu cụ thể cho mỗi cơ sở dữ liệu triển khai API JDBC.

Đầu tiên tải xuống jar trình kết nối MySQL từ www.mysql.com, sau đó:

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

Trong tab thư viện, nhấn Add External Jarvà chọn bình của bạn.


3

Đối với các dự án dựa trên Maven, bạn cần một sự phụ thuộc.

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

2
Tại sao PostgreSQL? Câu hỏi là về MySQL.
naXa

Đã chỉnh sửa câu trả lời để phù hợp với câu hỏi
tomtomssi

2

Trong dự án vào thư mục Libraries -> nhấp chuột phải -> Add Library -> Mysqlconnector 5.1


2

Trình kết nối trình điều khiển không có trong đường dẫn xây dựng của bạn. Định cấu hình đường dẫn xây dựng và trỏ nó đến 'mysql-connector-java-5.1.25-bin.jar' (kiểm tra phiên bản bạn đang sử dụng). Ngoài ra bạn có thể sử dụng maven: D


1

Tầm thường vì nó có vẻ như trong trường hợp của tôi dự án maven phiên bản netbeans 7.2.1 là khác nhau. Có một thư mục trong dự án được gọi là gói phụ thuộc. Nhấp chuột phải và sau đó nó sẽ xuất hiện một cửa sổ bật lên, nơi bạn có thể tìm kiếm các gói. Trong khu vực truy vấn đặt

mysql-connector

Nó sẽ hiển thị các trận đấu (có vẻ như nó làm điều này với một số kho lưu trữ). Nhấp đúp rồi cài đặt.


1

Đó là do thư mục WEB-INF không tồn tại tại vị trí trong thư mục con trong lỗi. Bạn có thể biên dịch ứng dụng để sử dụng thư mục WEB-INF trong public_html HOẶC sao chép thư mục WEB-INF trong thư mục con như trong lỗi ở trên.


1

Đối với IntelliJ Idea, hãy chuyển đến cấu trúc dự án của bạn (Tệp, Cấu trúc Dự án) và thêm tệp .jar trình kết nối mysql vào thư viện chung của bạn. Khi đó, nhấp chuột phải vào nó và chọn 'Thêm vào mô-đun'. Nhấn nút Apply / OK và bạn có thể bắt đầu.


0

Ngoại lệ cũng có thể xảy ra do đường dẫn lớp không được xác định.

Sau nhiều giờ nghiên cứu và thực sự trải qua hàng trăm trang, vấn đề là đường dẫn lớp của thư viện không được xác định.

Đặt đường dẫn lớp như sau trong máy tính Windows của bạn

set classpath=path\to\your\jdbc\jar\file;.


0

Nếu bạn đang sử dụng tomcat thì cùng với thư mục dự án, bạn cũng nên sao chép tệp jar của trình kết nối cơ sở dữ liệu sang tomcat / lib. điều này làm việc cho tôi


0

Điều này cần được sử dụng vào năm 2020

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

0

Tôi đang phát triển một ứng dụng JavaFX11 đơn giản với Cơ sở dữ liệu SQLite trong IDE Eclipse . Để tạo báo cáo, tôi đã thêm các lọ Jasper. Đột nhiên nó ném ra lỗi "NÀY" .

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

Nó đang chạy tốt (TRƯỚC KHI BỔ SUNG NÀY). Nhưng đột nhiên!

Tôi không sử dụng maven hoặc những người quản lý khác cho ứng dụng đơn giản này. Tôi đang thêm lọ theo cách thủ công.

Tôi đã tạo "Thư viện người dùng" và thêm các lọ của mình từ các thư mục bên ngoài.

VÙNG THÀNH CÔNG CỦA VẤN ĐỀ: "Thư viện Người dùng" của tôi được đánh dấu là thư viện hệ thống. Tôi chỉ cần loại bỏ đánh dấu. Bây giờ nó không phải là một thư viện hệ thống. "BÂY GIỜ DỰ ÁN CỦA TÔI HOẠT ĐỘNG TỐT".

BẢN THÂN GỢI Ý: Đã thử những thứ khác: TẠI CHẠY CẤU HÌNH: Thử xóa thư viện và thêm từng cái lọ một và xem. - ở đây bạn phải xóa tất cả các lọ một, không có chọn tất cả và xóa trong nhật thực ngay bây giờ trong cấu hình đang chạy. Vì vậy, các thông báo lỗi thay đổi hình thành một lọ khác.

Hy vọng điều này sẽ giúp ai đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.