java.lang.ClassNotFoundException: com.mysql.jdbc.Driver ใน Eclipse


90

เกิดอะไรขึ้นกับรหัสมีข้อผิดพลาดมากมายขณะทำการดีบัก ฉันกำลังเขียนโค้ดสำหรับคลาสซิงเกิลตันเพื่อเชื่อมต่อกับ mysql ฐานข้อมูล

นี่คือรหัสของฉัน

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

ฉันยังใหม่กับ java กรุณาช่วย.


2
โถไดรเวอร์อยู่ในคลาสพา ธ ของคุณหรือไม่
NINCOMPOOP

ตรวจสอบให้แน่ใจว่าคุณได้ซิงโครไนซ์บน getInstance ()
Siddharth

อาจซ้ำกันของClassNotFoundException com.mysql.jdbc.Driver
pathikrit

1
คุณต้องวางไฟล์ jar ลงในไดเร็กทอรี lib ของเว็บเซิร์ฟเวอร์ของคุณหากคุณได้รับข้อผิดพลาดในรันไทม์ ในขณะที่หากคุณได้รับข้อผิดพลาดเกี่ยวกับเวลาคอมไพล์ให้เพิ่ม jar ใน build path
djangodude

คำตอบ:


125

ดูเหมือนว่าไลบรารีการเชื่อมต่อ mysql จะไม่รวมอยู่ในโครงการ แก้ไขปัญหาโดยทำตามแนวทางแก้ไขปัญหาที่เสนอ:

  • MAVEN PROJECTS SOLUTION

เพิ่มการพึ่งพาตัวเชื่อมต่อ mysql ให้กับไฟล์โปรเจ็กต์ pom.xml:

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

นี่คือทุกเวอร์ชัน: https://mvnrepository.com/artifact/mysql/mysql-connector-java

  • การแก้ปัญหาโครงการทั้งหมด

เพิ่มไลบรารี jar ลงในโครงการด้วยตนเอง

คลิกขวาที่โครงการ -> สร้างเส้นทาง -> กำหนดค่าเส้นทางการสร้าง

ในการLibraries Tab กด Add External JarและSelectโถของคุณ

คุณสามารถค้นหา zip สำหรับ mysql-connector ได้ที่นี่

  • คำอธิบาย:

เมื่อสร้างโปรเจ็กต์ java จะส่งข้อยกเว้นให้คุณเนื่องจากไม่พบไฟล์ (คลาส com.mysql.jdbc.Driver) จากไลบรารีการเชื่อมต่อ mysql วิธีแก้ปัญหาคือการเพิ่มไลบรารีในโปรเจ็กต์และ java จะพบ com.mysql.jdbc.Driver


7
จะเกิดอะไรขึ้นถ้าเราไม่ได้ใช้ IDE ใด ๆ และเพียงแค่ทำงานบนเทอร์มินัลของเรา? แล้วจะจัดการกับปัญหานี้อย่างไร?
Achyuta Aich

2
ปัญหาจะไม่ได้รับการแก้ไขจนกว่าคุณจะเพิ่มmysql-connector-java-8.0.15.jarไฟล์ลงในapache-tomcat-9.0.16\libโฟลเดอร์ตามที่ @Asad แนะนำ
SWETA KESUR

53

หากคุณพบข้อผิดพลาดใน IDE ของคุณ (ข้อผิดพลาดเวลาคอมไพล์) คุณต้องเพิ่มไฟล์ jar ตัวเชื่อมต่อ mysql ลงใน libs ของคุณและเพิ่มสิ่งนี้ลงในไลบรารีของโครงการที่อ้างอิงด้วย

หากคุณได้รับข้อผิดพลาดนี้เมื่อคุณเรียกใช้อาจเป็นเพราะคุณไม่ได้รวมไฟล์ JAR ตัวเชื่อมต่อ mysql ไว้ในโฟลเดอร์ lib ของเว็บเซิร์ฟเวอร์

เพิ่มmysql-connector-java-5.1.25-bin.jarลงใน classpath ของคุณและในไดเรกทอรี lib ของเว็บเซิร์ฟเวอร์ของคุณ เส้นทาง Tomcat lib ให้เป็นตัวอย่างTomcat 6.0\lib


1
จะเกิดอะไรขึ้นถ้าเราไม่ได้ใช้ IDE ใด ๆ และเพียงแค่ทำงานบนเทอร์มินัลของเรา? แล้วจะจัดการกับปัญหานี้อย่างไร?
Achyuta Aich

หากคุณไม่ได้ใช้ IDE ใด ๆ คุณควรเพิ่มเส้นทางไฟล์ jar ลงใน classpath ของคุณ
Asad

2
การเพิ่มเซิร์ฟเวอร์ lib เป็นประเด็นสำคัญที่ควรทราบที่นี่ขอบคุณที่ทำงานให้ฉัน
Chandra_S


14

ทุกคนเขียนคำตอบ แต่ฉันก็ยังแปลกใจที่ไม่มีใครตอบได้จริงโดยใช้วิธีง่ายๆที่ดีที่สุด
คนตอบว่ามีไฟล์ jar แต่ข้อผิดพลาดจะยังคงเกิดขึ้น

เหตุผลก็คือไม่มีการปรับใช้ jar เมื่อโปรเจ็กต์รัน ดังนั้นสิ่งที่เราต้องทำคือบอก IDE เพื่อปรับใช้ jar นี้ด้วย

คนที่นี่ตอบหลายครั้งแล้วว่าให้วางไฟล์ jar ไว้ในโฟลเดอร์ lib ของ WEB-INF ดูเหมือนจะโอเค แต่ทำไมต้องทำด้วยตนเอง มีวิธีง่ายๆ ตรวจสอบขั้นตอนด้านล่าง:

ขั้นตอนที่ 1: หากคุณยังไม่ได้อ้างอิงไฟล์ jar ลงในโปรเจ็กต์ให้อ้างอิงแบบนี้

คลิกขวาที่โครงการและไปที่คุณสมบัติของโครงการ จากนั้นไปที่เส้นทางการสร้าง java จากนั้นเพิ่มไฟล์ jar ภายนอกผ่านทางนั้น

แต่จะยังไม่สามารถแก้ปัญหาได้เนื่องจากการเพิ่ม jar ภายนอกผ่าน build path ช่วยในการคอมไพล์คลาสเท่านั้นและ jar จะไม่ถูกปรับใช้เมื่อคุณรันโปรเจ็กต์ สำหรับที่ทำตามขั้นตอนนี้

คลิกขวาที่โครงการและไปที่คุณสมบัติของโครงการ จากนั้นไปที่Deployment Assemblyจากนั้นกดAddจากนั้นไปที่รายการเส้นทางการสร้าง javaและเพิ่มไลบรารีของคุณไม่ว่าจะเป็น jstl, mysql หรือไฟล์ jar อื่น ๆ เพิ่มลงในการปรับใช้ ด้านล่างนี้เป็นภาพสองภาพที่แสดง

ก่อนเพิ่ม

หลังจากเพิ่ม


ขอบคุณครับ. ที่ได้ผล ทำไมคนอื่นไม่พูดถึงเรื่องนี้อาจเป็นเพราะนี่เป็นโซลูชันสำหรับเว็บแอปพลิเคชันแบบไดนามิกเท่านั้นที่ใช้ Eclipse
Sayka

@sayka ใช่นั่นอาจเป็นเช่นนั้น
Tahir Hussain Mir

@TahirHussainMir ขอบคุณมาก. คำตอบนี้มีประโยชน์มาก :-)
ddmmcc

11

คุณจะต้องรวมโถไดรเวอร์สำหรับ MySQL MySQL Connector Jarใน classpath ของคุณ

หากคุณกำลังใช้ Eclipse: วิธีเพิ่มไลบรารีที่พึ่งพาใน Eclipse

หากคุณใช้บรรทัดคำสั่งให้รวมพา ธ ไปยังไดร์เวอร์ jar โดยใช้พารามิเตอร์ -cp ของ java

java -cp C:\lib\* Main

จะเกิดอะไรขึ้นถ้าเราไม่ได้ใช้ IDE ใด ๆ และเพียงแค่ทำงานบนเทอร์มินัลของเรา? แล้วจะจัดการกับปัญหานี้อย่างไร?
Achyuta Aich

1
การใช้-cpทำให้ไม่พบหรือโหลดข้อผิดพลาดของคลาสหลัก ฉันต้องใส่คลาสหลักในโฟลเดอร์อื่นหรือไม่?
zygimantus


8

JDBC API ส่วนใหญ่ประกอบด้วยอินเทอร์เฟซที่ทำงานโดยไม่ขึ้นกับฐานข้อมูลใด ๆ ต้องใช้ไดรเวอร์เฉพาะฐานข้อมูลสำหรับแต่ละฐานข้อมูลที่ใช้ JDBC API

ขั้นแรกให้ดาวน์โหลด MySQL connector jar จาก www.mysql.com จากนั้น:

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

ในแท็บไลบรารีกดAdd External Jarและเลือกโถของคุณ


3

สำหรับโครงการที่ใช้ Maven คุณต้องมีการพึ่งพา

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

2
ทำไมต้อง PostgreSQL คำถามเกี่ยวกับ MySQL
naXa

แก้ไขคำตอบให้ตรงกับคำถาม
tomtomssi


2

ตัวเชื่อมต่อไดรเวอร์ไม่ได้อยู่ในเส้นทางการสร้างของคุณ กำหนดค่าเส้นทางการสร้างและชี้ไปที่ 'mysql-connector-java-5.1.25-bin.jar' (ตรวจสอบเวอร์ชันที่คุณใช้) หรือคุณสามารถใช้ maven: D


2

สำหรับ IntelliJ Idea ให้ไปที่โครงสร้างโครงการของคุณ (ไฟล์โครงสร้างโครงการ) และเพิ่มไฟล์. jar ของตัวเชื่อมต่อ mysql ลงในไลบรารีส่วนกลางของคุณ เมื่อคลิกขวาแล้วเลือก 'เพิ่มลงในโมดูล' กดใช้ / ตกลงและคุณควรจะไป


1

เรื่องเล็กน้อยที่อาจดูเหมือนในกรณีของฉัน netbeans เวอร์ชัน maven project 7.2.1 นั้นแตกต่างกัน มีโฟลเดอร์ในโครงการที่เรียกว่าการอ้างอิง คลิกขวาจากนั้นจะเปิดหน้าต่างป๊อปอัปขึ้นมาเพื่อให้คุณค้นหาแพ็คเกจได้ ในพื้นที่แบบสอบถามใส่

mysql-connector

มันจะแสดงการจับคู่ขึ้นมา (ดูเหมือนว่าจะทำเช่นนี้กับที่เก็บบางส่วน) ดับเบิลคลิกแล้วติดตั้ง


1

เป็นเพราะไม่มีโฟลเดอร์ WEB-INF ที่ตำแหน่งในไดเร็กทอรีย่อยในข้อผิดพลาด คุณรวบรวมแอปพลิเคชันเพื่อใช้โฟลเดอร์ WEB-INF ภายใต้ public_html หรือคัดลอกโฟลเดอร์ WEB-INF ในโฟลเดอร์ย่อยตามข้อผิดพลาดด้านบน


0

ข้อยกเว้นอาจเกิดขึ้นได้เนื่องจากไม่ได้กำหนดเส้นทางคลาสไว้

หลังจากการค้นคว้าข้อมูลหลายชั่วโมงและผ่านไปหลายร้อยหน้าปัญหาก็คือเส้นทางชั้นเรียนของห้องสมุดไม่ได้กำหนดไว้

กำหนดเส้นทางคลาสดังต่อไปนี้ในเครื่อง windows ของคุณ

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


0

หากคุณใช้ tomcat ร่วมกับไดเรกทอรีโครงการคุณควรคัดลอกไฟล์ jar ตัวเชื่อมต่อฐานข้อมูลไปยัง tomcat / lib สิ่งนี้ได้ผลสำหรับฉัน


0

สิ่งนี้จะต้องใช้ในปี 2020

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

0

ฉันกำลังพัฒนาแอพลิเคชัน JavaFX11 ง่ายกับ SQLite ฐานข้อมูลในการEclipse IDE ในการสร้างรายงานฉันได้เพิ่มขวด Jasper ทันใดนั้นมันก็แสดงข้อผิดพลาด"THIS"

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

ทำงานได้ดี (ก่อนเพิ่มเติมนี้) แต่ทันใดนั้นเอง!

ฉันไม่ได้ใช้ maven หรือผู้จัดการคนอื่น ๆ สำหรับแอปพลิเคชันง่ายๆนี้ ฉันกำลังเพิ่มไหด้วยตนเอง

ฉันสร้าง "ไลบรารีผู้ใช้" และเพิ่มไหจากโฟลเดอร์ภายนอก

ปัญหาพื้นที่ที่เกิดขึ้น: "ไลบรารีผู้ใช้" ของฉันถูกทำเครื่องหมายเป็นไลบรารีระบบ ฉันเพิ่งลบเครื่องหมายออก ตอนนี้ไม่ใช่ไลบรารีระบบ "ตอนนี้โครงการของฉันทำงานได้ดี"

แก้ปัญหาตัวเอง: ลองสิ่งอื่น ๆ : ในการ กำหนดค่าการเรียกใช้: ลองลบไลบรารีและเพิ่มไหทีละรายการแล้วดู - ที่นี่คุณต้องลบไหทั้งหมดทีละอันไม่มีการเลือกทั้งหมดและลบใน eclipse ในขณะนี้ในการกำหนดค่าการรัน ดังนั้นข้อความแสดงข้อผิดพลาดจึงเปลี่ยนจากขวดหนึ่งไปยังอีกขวดหนึ่ง

หวังว่านี่จะช่วยใครบางคนได้


0
I was also facing the same problem

ดาวน์โหลดไฟล์ jar mysql-connector-java

วางลงในไฟล์ C:\Program Files\Apache Software Foundation\Tomcat 9.0\lib

หวังว่าจะได้ผลเช่นกัน !!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.