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

323,726

Solution 1

Make sure you run this first:

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

This forces the driver to register itself, so that Java knows how to handle those database connection strings.

For more information, see the MySQL Connector reference.

Solution 2

You have to load jdbc driver. Consider below Code.

try {
           Class.forName("com.mysql.jdbc.Driver");

            // connect way #1
            String url1 = "jdbc:mysql://localhost:3306/aavikme";
            String user = "root";
            String password = "aa";

            conn1 = DriverManager.getConnection(url1, user, password);
            if (conn1 != null) {
                System.out.println("Connected to the database test1");
            }

            // connect way #2
            String url2 = "jdbc:mysql://localhost:3306/aavikme?user=root&password=aa";
            conn2 = DriverManager.getConnection(url2);
            if (conn2 != null) {
                System.out.println("Connected to the database test2");
            }

            // connect way #3
            String url3 = "jdbc:mysql://localhost:3306/aavikme";
            Properties info = new Properties();
            info.put("user", "root");
            info.put("password", "aa");

            conn3 = DriverManager.getConnection(url3, info);
            if (conn3 != null) {
                System.out.println("Connected to the database test3");
            }
   } catch (SQLException ex) {
            System.out.println("An error occurred. Maybe user/password is invalid");
            ex.printStackTrace();
   } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

Solution 3

I had the same problem, my code is below:

private Connection conn = DriverManager.getConnection(Constant.MYSQL_URL, Constant.MYSQL_USER, Constant.MYSQL_PASSWORD);
private Statement stmt = conn.createStatement();

I have not loaded the driver class, but it works locally, I can query the results from MySQL, however, it does not work when I deploy it to Tomcat, and the errors below occur:

No suitable driver found for jdbc:mysql://172.16.41.54:3306/eduCloud

so I loaded the driver class, as below, when I saw other answers posted:

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

It works now! I don't know why it works well locally, I need your help, thank you so much!

Solution 4

An example of retrieving data from a table having columns column1, column2 ,column3 column4, cloumn1 and 2 hold int values and column 3 and 4 hold varchar(10)

import java.sql.*; 
// need to import this as the STEP 1. Has the classes that you mentioned  
public class JDBCexample {
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
    static final String DB_URL = "jdbc:mysql://LocalHost:3306/databaseNameHere"; 
    // DON'T PUT ANY SPACES IN BETWEEN and give the name of the database (case insensitive) 

    // database credentials
    static final String USER = "root";
    // usually when you install MySQL, it logs in as root 
    static final String PASS = "";
    // and the default password is blank

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;

        try {
    // registering the driver__STEP 2
            Class.forName("com.mysql.jdbc.Driver"); 
    // returns a Class object of com.mysql.jdbc.Driver
    // (forName(""); initializes the class passed to it as String) i.e initializing the
    // "suitable" driver
            System.out.println("connecting to the database");
    // opening a connection__STEP 3
            conn = DriverManager.getConnection(DB_URL, USER, PASS);
    // executing a query__STEP 4 
            System.out.println("creating a statement..");
            stmt = conn.createStatement();
    // creating an object to create statements in SQL
            String sql;
            sql = "SELECT column1, cloumn2, column3, column4 from jdbcTest;";
    // this is what you would have typed in CLI for MySQL
            ResultSet rs = stmt.executeQuery(sql);
    // executing the query__STEP 5 (and retrieving the results in an object of ResultSet)
    // extracting data from result set
            while(rs.next()){
    // retrieve by column name
                int value1 = rs.getInt("column1");
                int value2 = rs.getInt("column2");
                String value3 = rs.getString("column3");
                String value4 = rs.getString("columnm4");
    // displaying values:
                System.out.println("column1 "+ value1);
                System.out.println("column2 "+ value2);
                System.out.println("column3 "+ value3);
                System.out.println("column4 "+ value4);

            }
    // cleaning up__STEP 6
            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException e) {
    //  handle sql exception
            e.printStackTrace();
        }catch (Exception e) {
    // TODO: handle exception for class.forName
            e.printStackTrace();
        }finally{  
    //closing the resources..STEP 7
            try {
                if (stmt != null)
                    stmt.close();
            } catch (SQLException e2) {
                e2.printStackTrace();
            }try {
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e2) {
                e2.printStackTrace();
            }
        }
        System.out.println("good bye");
    }
}

Solution 5

You might have not copied the MySQL connector/J jar file into the lib folder and then this file has to be there in the classpath.

If you have not done so, please let me know I shall elaborate the answer

Share:
323,726
user3416261
Author by

user3416261

Updated on July 09, 2022

Comments

  • user3416261
    user3416261 almost 2 years

    I have this Java program: MySQLConnectExample.java

    import java.sql.*;
    import java.util.Properties;
    
    public class MySQLConnectExample {
        public static void main(String[] args) {
            Connection conn1 = null;
            Connection conn2 = null;
            Connection conn3 = null;
    
            try {
                String url1 = "jdbc:mysql://localhost:3306/aavikme";
                String user = "root";
                String password = "aa";
    
                conn1 = DriverManager.getConnection(url1, user, password);
                if (conn1 != null)
                    System.out.println("Connected to the database test1");
    
                String url2 = "jdbc:mysql://localhost:3306/aavikme?user=root&password=aa";
                conn2 = DriverManager.getConnection(url2);
                if (conn2 != null) {
                    System.out.println("Connected to the database test2");
                }
    
                String url3 = "jdbc:mysql://localhost:3306/aavikme";
                Properties info = new Properties();
                info.put("user", "root");
                info.put("password", "aa");
    
                conn3 = DriverManager.getConnection(url3, info);
                if (conn3 != null) {
                    System.out.println("Connected to the database test3");
                }
            } catch (SQLException ex) {
                System.out.println("An error occurred. Maybe user/password is invalid");
                ex.printStackTrace();
            }
        }
    }
    

    I compile it like this:

    E:\java mysql code driver>javac MySQLConnectExample.java
    
    E:\java mysql code driver>java -cp mysql-connector-java-3.0.11-stable-bin.jar;.
    MySQLConnectExample
    

    I get this error:

    An error occurred. Maybe user/password is invalid
    java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/
    aavikme
            at java.sql.DriverManager.getConnection(DriverManager.java:596)
            at java.sql.DriverManager.getConnection(DriverManager.java:215)
            at MySQLConnectExample.main(MySQLConnectExample.java:20)
    

    What am I doing wrong?

  • Gimby
    Gimby about 10 years
    Its legacy code but it will most likely fix this problem because this is a very old driver. Downloading a more recent driver version will likely also make the problem go away without changing the code.
  • user3416261
    user3416261 about 10 years
    compile time error class not found exception !!!
  • unknown
    unknown about 10 years
    see my modified answer.
  • user3416261
    user3416261 about 10 years
    compile time error class not found exception !!!
  • user3416261
    user3416261 about 10 years
    what you have modified i don't see any change in code import
  • user3416261
    user3416261 about 10 years
    this is error while compiling E:\java mysql code driver>javac MySQLConnectExample.java MySQLConnectExample.java:16: error: unreported exception ClassNotFoundException; must be caught or declared to be thrown Class.forName("com.mysql.jdbc.Driver"); ^ 1 error
  • user3416261
    user3416261 about 10 years
  • user3416261
    user3416261 about 10 years
    this is error while compiling E:\java mysql code driver>javac MySQLConnectExample.java MySQLConnectExample.java:16: error: unreported exception ClassNotFoundException; must be caught or declared to be thrown Class.forName("com.mysql.jdbc.Driver"); ^ 1 error
  • unknown
    unknown about 10 years
    I have added ClassNotFoundException. Try it.
  • RuntimeException
    RuntimeException about 10 years
    Just a suggestion. The -cp argument on command line must point to the full path of the driver jar . Like -cp c:\jars\driverjar.jar;.
  • Ky -
    Ky - about 9 years
    on line Class.forName("com.mysql.jdbc.Driver");: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
  • Ky -
    Ky - about 9 years
    on line Class.forName("com.mysql.jdbc.Driver");: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
  • LZH
    LZH almost 8 years
    by default mysql listen to port 3306
  • lepe
    lepe over 7 years
    Even though that line is not required its very helpful to know if the driver is correctly loaded.
  • So S
    So S over 5 years
    I added the Class.forName ... line just before establishing the connection.
  • Kelvin Bouma
    Kelvin Bouma over 2 years
    This is deprecated, please use "com.mysql.cj.jdbc.Driver" instead