Class.forName("com.mysql.jdbc.Driver"); ClassNotFoundException: com.mysql.jdbc.Driver

PeterFoe

Aktives Mitglied
Hallo, ich habe Ubuntu 24.04 installiert und java und mysql installiert, keine Probleme.

Aber bei mit hat JDBC ein Problem:
java.lang.ClassNotFoundException: com.mysql,jdbc.Driver.

Im Editor ausgeführt:
Java:
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
class Tutorial {
    public static void main (String ar[]) {
        try {
            System.out.println("Datenbank Tutorial 1");
            System.out.println("Datenbank 0");
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("Datenbank 1");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3300/database_name", "root", "root");
            System.out.println("Datenbank 2");
            Statement st=con.createStatement();
            ResultSet rs=st.executeQuery("Select * from employee");
            System.out.println("Database Connected");
            rs.first();
            System.out.println("Id is " + rs.getInt(1) + " Name is " + rs.getString(2));
        } catch (SQLException ex) {
            System.out.println("Database Tutorial failed SQLException");
            ex.printStackTrace();
        } catch (ClassNotFoundException ec) {
            System.out.println("Database Tutorial failed ClassNotFoundException");
            ec.printStackTrace();

        }
    }
}
Ich habe mit Editor ausgeführt;
Code:
JAVA_HOME="/usr/lib/jvm/java-21-openjdk-amd64"
export JAVA_HOME
CLASSPATH="$CLASSPATH:/usr/lib/jvm/mysql-connector-java-8.4.0.jar"
export CLASSPATH
und in /usr/lib/jvm eingetragen:
default-java
java-1.21.0-openjdk-amd64
java-21-openjdk-amd64
mysql-connector-j-8.4.0.jar
mysql-connector-java-8.4.0.jar
Aber ich habe denFehler java.lang.ClassNotFoundException: com.mysql,jdbc.Driver.
Was mache ich falsch?
 
Zuletzt bearbeitet von einem Moderator:
Mit "Class.forName("com.mysql.cj.jdbc.Driver")": java.lang.ClassNotFoundException; com.mysql.cj.jdbc.Driver

ohne "Class.forName ( ... )" UND
/*catch (ClassNotFoundException ec) { ... }
java.sql.SQLException:: no suitable driver found for jdbc:mysql://localhost:3300/database_name

Was nun?
 
Mit Class.forName("com.mysql.cj.jdbc.Driver");
ClassNotFoundException: com.mysql.cj.jdbc.Driver

und ohne Class.forName und "catch (ClassNotFoundException cnf ) { ... }
java.sql.SQLException: No suitable Driver found for jdbc:mysql://localhost:3300/database_name

Und jetzt?
 
Wie du siehst fehlt der MySQL-JDBC-Treiber im Classpath. Es gibt nun verschiedene Möglichkeiten und es kommt etwas auf dein Projekt an.
Wenn du ein Maven-Projekt verwendest - empfohlenes Vorgehen - dann fügst du die Abhängigkeit deiner pom.xml hinzu.
Verwendest du einfach ein Java-Projekt in einer IDE, dann musst du dem Projekt-Classpath den Treiber hinzufügen. Wie das genau funktioniert ist von deiner IDE abhängig.
Arbeitest du einfach mit VIM oder im Terminal, dann musst du in deiner Shell-Session den Classpath richtig setzen und/oder beim Kompilieren/Starten die richtigen Parameter verwenden.
Die Installation von Ubuntu hat damit wenig zu tun. Es ist sinnvoller die Programmierung vom OS zu trennen, so musst du nicht Java und Linux gleichzeitig managen. Verwende am besten Maven-Projekte, das erleichtert dir auch später den Bau des von der IDE unabhängigen Programms.

 
in .bashrc:
CLASSPATH="$CLASSPATH:/usr/lib/jvm/mysql-connector-java-8.4.0.jar"
export CLASSPATH

und in /usr/lib/jvm/mysql-connector-java-8.4.0.jar und /usr/lib/jvm/mysql-connector-j
 
Also der JDBC Driver ist meines Wissens nach in der mysql-connector-j-8.4.0.jar ... Ich weiss jetzt nicht, was ist der mysql-connector-java-8.4.0.jar sein soll - evtl. der Source Code?

Es bringt dann aber nichts, dass Du im Classpath nur das jar mit Source Code hast. Also vermutlich wirst Du einfach nur in der bashrc ändern müssen:
CLASSPATH="$CLASSPATH:/usr/lib/jvm/mysql-connector-j-8.4.0.jar"

Aber das setzt voraus, dass Du es auch auf der Kommandozeile aufrufst. Aber das ist auch etwas, das Du uns komplett verschwiegen hast: Wie genau startest Du denn Deinen Code?

Generell ist dein Vorgehen aus meiner Sicht dubios. Wozu die bashrc anpassen? Du kannst den Classpath z.B. direkt beim Start angeben, also etwas wie
java -cp ./mysql-connector-j-8.4.0.jar Tutorial

Aber wenn Du Dir die Java Entwicklung beibringen willst: Nimm doch bei sowas eine Entwicklungsumgebung? Dann hast Du ein Projekt und kannst in dem Projekt Abhängigkeiten hinzu fügen. Das kann ein Maven Projekt sein wie schon als eine Option angegeben aber es kann auch direkt ein Projekt in IntelliJ oder Eclipse sein. (Ich würde Dir aber auch direkt Maven empfehlen!)

Auf jeden Fall macht es keinen Sinn, Dein System zu verhunzen und irgendwas in /usr abzulegen oder eine CLASSPATH Variable generell anzupassen.
 
KonradN,

jetzt mache ich das mit "kate Tutorial.java" und "java Tutorial.java".
Ich habe auch NetBeans.

Oneixee5,
"kate Tutorial.java" und "java Tutorial.java".
Ich habe auch NetBeans.

M.L, SQuirreL SQl Client, habe ich noch nie benutzt

Danke Peter
 
KonradN,
ich habe jetzt
CLASSPATH="$CLASSPATH:/usr/lib/jvm/mysql-connector-j-8.4.0.jar"
export CLASSPATH
bei /home/peter/.bashrc eingetragen. /usr/lib/jvm/mysql-connector-j-8.4.0.jar ist gleich.
ich habe nur "chmod +x mysql-connector-j-8.4.0.jar" eingefügt

Aber SQLException:
No suitable driver found for jdbc:mysql://localhost:3306/database_name
 
Dann mach doch mit Netbeans ein neues Projekt: Java with Maven. Und dann dort die Abhängigkeit mit aufführen in der pom.xml und dann einfach über Netbeans starten ….

Das wäre ein möglicher, relativ einfacher, Weg.
 
Danke,
ich habe nochmal apache-maven heruntergeladen und installliert. Und wieder in .bashrc eingetragen..
Und in NetBeans die pom.xls wieder eingetragen.

Dann noch: Access denied for "root"@"localhost"
mysql> set global validate_password.policy=low;
mysql> set global validate_password.length=8;
mysql> set global validate_password.number_count=0;
mysql> alter user "root"@"localhost" identified with mysql_native_password by "RootRoot&"; <- anderes Passwort
mysql> flush privileges;

Jetzt geht es in NetBeans,
 

Zurück
Oben