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

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?

3

9 Answers

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.

6

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

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!

1

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"); }
}
1

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

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

This is what you are missing to have everything working.

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

try this

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

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

1

You Might Also Like