web-dev-qa-db-fra.com

java.sql.SQLException: Aucun pilote approprié trouvé pour jdbc: mysql: // localhost: 3306 / dbname

J'ai ce programme Java: 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();
        }
    }
}

je le compile comme ceci:

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

je reçois cette erreur:

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)

Qu'est-ce que je fais mal?

38
user3416261

Assurez-vous de lancer ceci en premier:

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

Cela oblige le pilote à s’enregistrer lui-même, de sorte que Java sache comment gérer ces chaînes de connexion à la base de données.

Pour plus d'informations, reportez-vous à la section référence de MySQL Connector .

66
Adam Batkin

Vous devez charger jdbc driver. Considérez ci-dessous 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();
   }
10
unknown

Un exemple d'extraction de données d'une table comportant les colonnes column1, column2, column3 column4, cloumn1 et 2 contient les valeurs int et les colonnes 3 et 4, 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");
    }
}
5
dresh

J'ai eu le même problème, mon code est ci-dessous:

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

Je n'ai pas chargé la classe de pilote, mais cela fonctionne localement, je peux interroger les résultats depuis MySQL. Toutefois, cela ne fonctionne pas lorsque je le déploie sur Tomcat et les erreurs ci-dessous se produisent:

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

alors j'ai chargé la classe driver, comme ci-dessous, quand j'ai vu d'autres réponses postées:

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

Ça fonctionne maintenant! Je ne sais pas pourquoi cela fonctionne bien localement, j'ai besoin de votre aide, merci beaucoup!

5
StrongYoung

Vous n'avez peut-être pas copié le fichier jar MySQL connector/J dans le dossier lib. Ce fichier doit ensuite figurer dans le chemin d'accès aux classes.

Si vous ne l'avez pas encore fait, s'il vous plaît laissez-moi savoir que je vais élaborer la réponse

4
inquisitive

Dans votre code, il vous manque Class.forName("com.mysql.jdbc.Driver");

C'est ce qui vous manque pour que tout fonctionne.

2
Karue Benson Karue

Toutes les réponses ici utilisent la ligne Class.forName("my.vandor.Driver"); pour charger le pilote.

En guise d'alternative (meilleure), vous pouvez utiliser la classe d'assistance DriverManager qui fournit une poignée de méthodes pour gérer votre/vos pilote (s) JDBC.

Tu pourrais vouloir

  1. Utilisez DriverManager.registerDriver(driverObject); pour enregistrer votre pilote dans sa liste de pilotes.

Enregistre le pilote donné avec DriverManager. Une classe de pilote nouvellement chargée doit appeler la méthode registerDriver pour se faire connaître au DriverManager. Si le pilote est actuellement enregistré, aucune action n'est entreprise.

  1. Utilisez DriverManager.deregisterDriver(driverObject); pour le supprimer.

Supprime le pilote spécifié de la liste des pilotes enregistrés de DriverManager.

Exemple:

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

ou mieux encore, utilisez un DataSource

1
svarog