Java.SQL.SQLException: aucun pilote approprié n'a été trouvé pour jdbc: mysql: / / localhost:3306 / dbname [dupliquer]

cette question a déjà une réponse ici:

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 de mal?

31
demandé sur Eric Leschinski 2014-03-13 20:19:11

9 réponses

assurez-vous d'exécuter ce premier:

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

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

pour plus d'information, voir le référence du connecteur MySQL .

57
répondu Adam Batkin 2014-03-13 16:22:26

vous devez charger jdbc driver . Envisager de Code ci-dessous.

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
répondu unknown 2014-03-13 17:33:07

exemple d'extraction de données d'un tableau comportant les colonnes column1, columnn2 ,column3, column4, cloumn1 et 2 tenir les valeurs int et les colonnes 3 et 4 tenir 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
répondu dresh 2016-01-06 19:55:44

vous n'avez peut-être pas copié le fichier jar MySQL connector/J dans le dossier lib, et ce fichier doit être dans classpath.

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

4
répondu inquisitive 2014-09-30 09:13:00

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 de MySQL, cependant, cela ne fonctionne pas quand 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

donc j'ai chargé la classe de conducteur, comme ci-dessous, quand j'ai vu d'autres réponses posté:

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

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

3
répondu StrongYoung 2018-08-16 19:18:40

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

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

2
répondu Karue Benson Karue 2015-07-29 07:19:08

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

comme (meilleure) alternative, vous pouvez utiliser la classe d'aide DriverManager qui vous fournit une poignée de méthodes pour manipuler votre pilote JDBC/s.

Vous pourriez vouloir

  1. utilisez DriverManager.registerDriver(driverObject); pour inscrire votre pilote à sa liste de pilotes

enregistre le conducteur donné avec le DriverManager. Une classe de pilotes nouvellement chargée devrait appeler la méthode registerDriver pour se faire connaître au DriverManager. Si le conducteur est actuellement inscrit, aucune mesure n'est prise

  1. utilisez DriverManager.deregisterDriver(driverObject); pour l'enlever.

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
répondu svarog 2016-11-21 20:57:30

essayez cette

String url = "jdbc:mysql://localhost:3306/<dbname>";
String user = "<username>";
String password = "<password>";
conn = DriverManager.getConnection(url, user, password); 
-1
répondu Hari Nair 2016-01-06 18:27:23

j'ai eu un problème similaire, il suffit de vérifier le port où votre serveur Mysql est en cours d'exécution, qui va résoudre le problème

par exemple, mon code était:

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

je change la chaîne en

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

et voilà!!, cela a fonctionné parce que mon serveur fonctionnait sur ce port

Espérons que cette aide

-2
répondu Deathcore Ortega 2016-06-13 10:09:07