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

JavaMysqlSqlJdbcConnectivity

Java Problem Overview


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?

Java Solutions


Solution 1 - Java

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 - Java

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 - Java

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 - Java

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 - Java

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

Solution 6 - Java

In your code you are missing Class.forName("com.mysql.jdbc.Driver");

This is what you are missing to have everything working.

Solution 7 - Java

All of the answers here use the Class.forName("my.vandor.Driver"); line to load the driver.

As an (better) alternative you can use the DriverManager helper class which provides you with a handful of methods to handle your JDBC driver/s.

You might want to

  1. Use DriverManager.registerDriver(driverObject); to register your driver to it's list of drivers

>Registers the given driver with the DriverManager. A newly-loaded driver class should call the method registerDriver to make itself known to the DriverManager. If the driver is currently registered, no action is taken

  1. Use DriverManager.deregisterDriver(driverObject); to remove it.

>Removes the specified driver from the DriverManager's list of registered drivers.

Example:

Driver driver = new oracle.jdbc.OracleDriver();
DriverManager.registerDriver(driver);
Connection conn = DriverManager.getConnection(url, user, password);
// ... 
// and when you don't need anything else from the driver
DriverManager.deregisterDriver(driver);

or better yet, use a DataSource

Solution 8 - Java

try this

String url = "jdbc:mysql://localhost:3306/<dbname>";
String user = "<username>";
String password = "<password>";
conn = DriverManager.getConnection(url, user, password); 

Solution 9 - Java

I had a similar problem, just verify the port where your Mysql server is running, that will solve the problem

For example, my code was:

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:8080/bddventas","root","");

i change the string to

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bddventas","root","");

and voila!!, this workd because my server was running on that port

Hope this help

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser3416261View Question on Stackoverflow
Solution 1 - JavaAdam BatkinView Answer on Stackoverflow
Solution 2 - JavaunknownView Answer on Stackoverflow
Solution 3 - JavaStrongYoungView Answer on Stackoverflow
Solution 4 - JavadreshView Answer on Stackoverflow
Solution 5 - JavainquisitiveView Answer on Stackoverflow
Solution 6 - JavaKarue Benson KarueView Answer on Stackoverflow
Solution 7 - JavasvarogView Answer on Stackoverflow
Solution 8 - JavaHari NairView Answer on Stackoverflow
Solution 9 - JavaDeathcore OrtegaView Answer on Stackoverflow