user1709291
user1709291

Reputation: 43

No Suitable Driver Found. Java JDBC mysql connector

Here is my code:

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

public class Main {

    public void connect() {
        Connection con = null;


        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql//localhost:3306/mydb", "dev", "pass");
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            if (con != null) try { con.close(); } catch(Exception e) {}
        }
    }

    public static void main(String[] args) {
        Main m = new Main();

        m.connect();
    }
}

I have imported mysql-connector-java-5.1.39.jar as a library in IntelliJ and as you can see the driver is imported in the code.

But I get:

java.sql.SQLException: No suitable driver found for jdbc:mysql//localhost:3306/mydb

I have looked at countless stack overflow questions and I can't figure out what more it needs to at least attempt a connection. I have a local SQL server running, and I've double checked the port and database name.

Any ideas would be appreciated, thanks.

EDIT: this is not a duplicate. The solution to the other question that someone flagged is not relevant here. I had already added the jar as a library for the project, as described in the other question. Also, the crash doesn't happen on the "Class.forName" part, it crashes on the subsequent line.

Upvotes: 0

Views: 2453

Answers (3)

Stephen C
Stephen C

Reputation: 718698

You are missing a colon character.

"jdbc:mysql//localhost:3306/mydb"

should be

"jdbc:mysql://localhost:3306/mydb"

See Connecting to MySQL Using the JDBC DriverManager Interface.

The missing colon means that the driver manager will attempt to look for a driver provider called "mysql//localhost" rather than "mysql". Of course, no such provider exists.


The Class.forName call in your code is not necessary. But the fact that the call succeeding is a strong clue that the problem is NOT that the driver class is missing. It should cause the reader to look for other reasons why DriverManager couldn't find the driver.

Upvotes: 3

N00b Pr0grammer
N00b Pr0grammer

Reputation: 4647

The JDBC connection string for MySQL has been well explained here in the MySQL documentation. Based on that, the mistake that you've done here is a simple miss of colon after the database type, mysql

You're connection string (without the credentials, though) is going to change from this:

"jdbc:mysql//localhost:3306/mydb"

To this:

"jdbc:mysql://localhost:3306/mydb"

Upvotes: 0

user207421
user207421

Reputation: 310850

jdbc:mysql//localhost:3306/mydb

You are missing a colon after mysql.

NB the Class.forName()line hasn't been necessary for ten years.

Upvotes: 1

Related Questions