Connectez Java à une base de données MySQL


Comment vous connectez - vous à une base de données MySQL en Java?

Quand j'essaie, j'obtiens

java.sql.SQLException: No suitable driver found for jdbc:mysql://database/table
    at java.sql.DriverManager.getConnection(DriverManager.java:689)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)

Ou

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

Ou

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
Author: Mark Rotteveel, 2010-05-15

14 answers

DriverManager est une façon assez ancienne de faire les choses. Le meilleur moyen est d'obtenir un DataSource, soit en recherchant un conteneur que votre serveur d'applications a déjà configuré pour vous:

Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDB");

Ou instancier et configurer un de votre pilote de base de données directement:

MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser("scott");
dataSource.setPassword("tiger");
dataSource.setServerName("myDBHost.example.org");

Puis obtenir des connexions à partir de celui-ci, comme ci-dessus:

Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ID FROM USERS");
...
rs.close();
stmt.close();
conn.close();
 215
Author: Sean Owen, 2010-05-15 09:10:09

Voici une explication étape par étape, comment installer MySQL et JDBC et comment l'utiliser:

  1. Téléchargez et installez le serveur MySQL . Faites-le simplement de la manière habituelle. Rappelez - vous le numéro de port chaque fois que vous l'avez modifié. C'est par défaut 3306.

  2. Téléchargez le pilote JDBC et placez-le dans classpath, extrayez le fichier ZIP et placez le fichier JAR contenant dans le classpath. Le pilote JDBC spécifique au fournisseur est une implémentation concrète de l'API JDBC (tutoriel ici ).

    Si vous utilisez unE comme Eclipse ou Netbeans, vous pouvez l'ajouter au classpath en ajoutant le fichier JAR en tant que Libraryau Build Path dans les propriétés du projet.

    Si vous le faites "plain vanilla" dans la console de commande, vous devez spécifier le chemin d'accès au fichier JAR dans l'argument -cp ou -classpath lors de l'exécution de votre application Java.

    java -cp .;/path/to/mysql-connector.jar com.example.YourClass

    Le . est juste là pour ajoutez également le répertoire current au chemin de classe afin qu'il puisse localiser com.example.YourClass et que le ; soit le séparateur de chemin de classe tel qu'il est dans Windows. Dans Unix et clones : devrait être utilisé.

  3. Créer unebase de données dans MySQL . Créons une base de données javabase. Vous voulez bien sûr la Domination du monde, alors utilisons UTF-8 aussi.

    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  4. Créer un utilisateur Java et subvention accès. Tout simplement parce que utiliser root est une mauvaise pratique.

    CREATE USER 'java'@'localhost' IDENTIFIED BY 'password';
    GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'password';
    

    Oui java est le nom d'utilisateur et password est le mot de passe ici.

  5. Déterminer l'URL JDBC. Pour connecter la base de données MySQL en utilisant Java, vous avez besoin d'une URL JDBC dans la syntaxe suivante:

    jdbc:mysql://hostname:port/databasename
    • hostname: Le nom d'hôte où le serveur MySQL est installé. S'il est installé sur la même machine sur laquelle vous exécutez le code Java, vous pouvez simplement utiliser localhost. Il peut également s'agir d'une adresse IP comme 127.0.0.1. Si vous rencontrez des problèmes de connectivité et que l'utilisation de 127.0.0.1 au lieu de localhost l'a résolu, vous avez un problème dans votre configuration réseau/DNS/hosts.

    • port: Le port TCP / IP sur lequel le serveur MySQL écoute. C'est par défaut 3306.

    • databasename: le nom de La base de données que vous souhaitez vous connecter. C'est javabase.

    Donc l'URL finale devrait ressembler à:

    jdbc:mysql://localhost:3306/javabase
  6. Testez le connexion à MySQL en utilisant Java . Créez une classe Java simple avec une méthode main() pour tester la connexion.

    String url = "jdbc:mysql://localhost:3306/javabase";
    String username = "java";
    String password = "password";
    
    System.out.println("Connecting database...");
    
    try (Connection connection = DriverManager.getConnection(url, username, password)) {
        System.out.println("Database connected!");
    } catch (SQLException e) {
        throw new IllegalStateException("Cannot connect the database!", e);
    }
    

    Si vous obtenez un SQLException: No suitable driver, cela signifie que le pilote JDBC n'a pas du tout été chargé automatiquement ou que l'URL JDBC est incorrecte (c'est-à-dire qu'elle n'a été reconnue par aucun des pilotes chargés). Normalement, un pilote JDBC 4.0 doit être chargé automatiquement lorsque vous le déposez simplement dans runtime classpath. Pour exclure l'un et l'autre, vous pouvez toujours le charger manuellement comme ci-dessous:

    System.out.println("Loading driver...");
    
    try {
        Class.forName("com.mysql.jdbc.Driver");
        System.out.println("Driver loaded!");
    } catch (ClassNotFoundException e) {
        throw new IllegalStateException("Cannot find the driver in the classpath!", e);
    }
    

    Note le newInstance() appel est pas nécessaire ici. C'est juste pour réparer l'ancien et le buggy org.gjt.mm.mysql.Driver. Explication ici. Si cette ligne lance ClassNotFoundException, alors le fichier JAR contenant la classe de pilote JDBC n'est tout simplement pas placé dans le chemin de classe.

    Notez que vous n'avez pas besoin de charger le pilote à chaque fois avant de connexion. Une seule fois au démarrage de l'application suffit.

    Si vous obtenez un SQLException: Connection refused ou Connection timed out ou un CommunicationsException: Communications link failure spécifique à MySQL, alors cela signifie que le DB n'est pas accessible à tous. Cela peut avoir une ou plusieurs des causes suivantes:

    1. L'adresse IP ou le nom d'hôte dans l'URL JDBC est incorrect.
    2. Le nom d'hôte dans l'URL JDBC n'est pas reconnu par le serveur DNS local.
    3. Le numéro de port est manquant ou incorrect dans l'URL JDBC.
    4. Le serveur DB est en panne.
    5. DB server n'accepte pas les connexions TCP/IP.
    6. Le serveur DB n'a plus de connexions.
    7. Quelque chose entre Java et DB bloque les connexions, par exemple un pare-feu ou un proxy.

    Pour résoudre l'un ou l'autre, suivez les conseils suivants:

    1. Vérifiez-les et testez-les avec ping.
    2. Actualisez le DNS ou utilisez plutôt l'adresse IP dans l'URL JDBC.
    3. Vérifiez-le sur la base de my.cnf de MySQL DB.
    4. Démarrer la base de données.
    5. Vérifiez si mysqld est démarré sans le --skip-networking option.
    6. Redémarrez la base de données et corrigez votre code en conséquence pour qu'il ferme les connexions dans finally.
    7. Désactiver le pare-feu et / ou configurez le pare-feu/proxy pour autoriser/transférer le port.

    Notez que la fermeture du Connection estextrêmement importante. Si vous ne fermez pas les connexions et continuez à en obtenir beaucoup en peu de temps, la base de données peut manquer de connexions et votre application peut se casser. Toujours acquérir le Connection dans un try-with-resources déclaration de. Ou si vous n'êtes pas encore sur Java 7, fermez-le explicitement dans finally d'un bloc try-finally. Fermer finally est juste pour assurer qu'il soit fermé aussi en cas d'exception. Cela vaut également pour Statement, PreparedStatement et ResultSet.

C'était en ce qui concerne la connectivité. Vous pouvez trouver ici un tutoriel plus avancé sur la façon de charger et de stocker des objets de modèle Java fullworthy dans une base de données à l'aide d'une classe DAO de base.


L'utilisation d'un modèle Singleton pour la connexion DB est une mauvaise approche. Voir entre autres questions: http://stackoverflow.com/q/9428573 / . Ceci est une erreur de démarrage # 1.

 491
Author: BalusC, 2017-06-29 00:45:14

Initialiser les constantes de base de données

Créez le nom d'utilisateur, le mot de passe, l'URL et les pilotes de la base de données des propriétés constantes, la limite d'interrogation, etc.

// init database constants
// com.mysql.jdbc.Driver
private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name";
private static final String USERNAME = "root";
private static final String PASSWORD = "";
private static final String MAX_POOL = "250"; // set your own limit

Initialiser la connexion et les propriétés

Une fois la connexion établie, il est préférable de stocker à des fins de réutilisation.

// init connection object
private Connection connection;
// init properties object
private Properties properties;

Créer des propriétés

L'objet properties contient les informations de connexion, vérifiez si elles sont déjà définies.

// create properties
private Properties getProperties() {
    if (properties == null) {
        properties = new Properties();
        properties.setProperty("user", USERNAME);
        properties.setProperty("password", PASSWORD);
        properties.setProperty("MaxPooledStatements", MAX_POOL);
    }
    return properties;
}

Connecter la base de données

Connectez-vous maintenant à la base de données utilisation des constantes et des propriétés initialisées.

// connect database
public Connection connect() {
    if (connection == null) {
        try {
            Class.forName(DATABASE_DRIVER);
            connection = DriverManager.getConnection(DATABASE_URL, getProperties());
        } catch (ClassNotFoundException | SQLException e) {
            // Java 7+
            e.printStackTrace();
        }
    }
    return connection;
}

Déconnecter la base de données

Une fois que vous avez terminé les opérations de base de données, fermez simplement la connexion.

// disconnect database
public void disconnect() {
    if (connection != null) {
        try {
            connection.close();
            connection = null;
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

Tout ensemble

Utilisez cette classe MysqlConnect directement après avoir changé database_name, nom d'utilisateur et mot de passe, etc.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class MysqlConnect {
    // init database constants
    private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
    private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/database_name";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "";
    private static final String MAX_POOL = "250";

    // init connection object
    private Connection connection;
    // init properties object
    private Properties properties;

    // create properties
    private Properties getProperties() {
        if (properties == null) {
            properties = new Properties();
            properties.setProperty("user", USERNAME);
            properties.setProperty("password", PASSWORD);
            properties.setProperty("MaxPooledStatements", MAX_POOL);
        }
        return properties;
    }

    // connect database
    public Connection connect() {
        if (connection == null) {
            try {
                Class.forName(DATABASE_DRIVER);
                connection = DriverManager.getConnection(DATABASE_URL, getProperties());
            } catch (ClassNotFoundException | SQLException e) {
                e.printStackTrace();
            }
        }
        return connection;
    }

    // disconnect database
    public void disconnect() {
        if (connection != null) {
            try {
                connection.close();
                connection = null;
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

Comment utiliser?

Initialise la classe de base de données.

// !_ note _! this is just init
// it will not create a connection
MysqlConnect mysqlConnect = new MysqlConnect();

Ailleurs dans votre code ...

String sql = "SELECT * FROM `stackoverflow`";
try {
    PreparedStatement statement = mysqlConnect.connect().prepareStatement(sql);
    ... go on ...
    ... go on ...
    ... DONE ....
} catch (SQLException e) {
    e.printStackTrace();
} finally {
    mysqlConnect.disconnect();
}

C'est tout :) Si quelque chose pour améliorer le modifier! Espérons que cela est utile.

 43
Author: Madan Sapkota, 2019-12-07 03:06:14
String url = "jdbc:mysql://127.0.0.1:3306/yourdatabase";
String user = "username";
String password = "password";

// Load the Connector/J driver
Class.forName("com.mysql.jdbc.Driver").newInstance();
// Establish connection to MySQL
Connection conn = DriverManager.getConnection(url, user, password);
 25
Author: heffaklump, 2010-05-15 07:43:10

Voici le minimum dont vous avez besoin pour extraire des données d'une base de données MySQL:

Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection
   ("jdbc:mysql://localhost:3306/foo", "root", "password");

Statement stmt = conn.createStatement();
stmt.execute("SELECT * FROM `FOO.BAR`");
stmt.close();
conn.close();

Ajouter la gestion des exceptions, la configuration, etc. goûter.

 12
Author: Kilian Foth, 2010-05-15 07:48:24

Connexion JDBC MySQL avec useSSL.

private String db_server = BaseMethods.getSystemData("db_server");
private String db_user = BaseMethods.getSystemData("db_user");
private String db_password = BaseMethods.getSystemData("db_password");

private String connectToDb() throws Exception {
   String jdbcDriver = "com.mysql.jdbc.Driver";
   String dbUrl = "jdbc:mysql://" + db_server  +
        "?verifyServerCertificate=false" +
        "&useSSL=true" +
        "&requireSSL=true";
    System.setProperty(jdbcDriver, "");
    Class.forName(jdbcDriver).newInstance();

    Connection conn = DriverManager.getConnection(dbUrl, db_user, db_password);
    Statement statement = conn.createStatement();
    String query = "SELECT EXTERNAL_ID FROM offer_letter where ID =" + "\"" + letterID + "\"";
    ResultSet resultSet = statement.executeQuery(query);
    resultSet.next();
    return resultSet.getString(1);
}
 3
Author: AJC, 2017-09-18 15:02:34

, Vous devez avoir mysql connector jar dans votre classpath.

En Java, l'API JDBC fait tout avec des bases de données. en utilisant JDBC, nous pouvons écrire des applications Java sur
1. Envoyer des requêtes ou mettre à jour SQL vers DB(toute base de données relationnelle) 2. Récupérer et traiter les résultats de DB

Avec trois étapes ci-dessous, nous pouvons récupérer des données à partir de n'importe quelle base de données

Connection con = DriverManager.getConnection(
                     "jdbc:myDriver:DatabaseName",
                     dBuserName,
                     dBuserPassword);

Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table");

while (rs.next()) {
    int x = rs.getInt("a");
    String s = rs.getString("b");
    float f = rs.getFloat("c");
}
 2
Author: kapil das, 2013-08-15 13:56:23

Vous pouvez voir toutes les étapes pour connecter la base de données MySQL à partir de l'application Java ici. D'autres bases de données, il vous suffit de changer le pilote dans la première étape seulement. Assurez-vous de fournir le bon chemin d'accès à la base de données et le nom d'utilisateur et le mot de passe corrects.

Visite http://apekshit.com/t/51/Steps-to-connect-Database-using-JAVA

 2
Author: Jwalant, 2017-02-13 06:15:03

Code court et doux.

try {       
    Class.forName("com.mysql.jdbc.Driver");
    System.out.println("Driver Loaded");
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testDB","root","");
    //Database Name - testDB, Username - "root", Password - ""
    System.out.println("Connected...");         
} catch(Exception e) {
    e.printStackTrace();
}

Pour SQL server 2012

try {
    String url = "jdbc:sqlserver://KHILAN:1433;databaseName=testDB;user=Khilan;password=Tuxedo123"; 
    //KHILAN is Host    and 1433 is port number     
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    System.out.println("Driver Loaded");
    conn = DriverManager.getConnection(url);
    System.out.println("Connected...");
} catch(Exception e) {
    e.printStackTrace();
}
 2
Author: KhiLan PaTeL, 2019-12-10 13:02:07

Connection J'utilisais il y a quelque temps, cela ressemblait au moyen le plus simple, mais il y avait aussi des recommandations à faire là if déclaration - exactement

Connection con = DriverManager.getConnection(
                     "jdbc:myDriver:DatabaseName",
                     dBuserName,
                     dBuserPassword);
if (con != null){
 //..handle your code there 
}

Ou quelque chose comme de cette façon:)

Il y a probablement un cas, tandis que getConnection peut retourner null :)

 1
Author: xxxvodnikxxx, 2015-05-28 09:50:13

COMMENT

  • Pour configurer le Pilote pour exécuter un échantillon rapide
1. Go to https://dev.mysql.com/downloads/connector/j/, get the latest version of Connector/J

2. Remember to set the classpath to include the path of the connector jar file.
If we don't set it correctly, below errors can occur:

No suitable driver found for jdbc:mysql://127.0.0.1:3306/msystem_development

java.lang.ClassNotFoundException: com.mysql.jdbc:Driver
  • Pour configurer le CHEMIN DE CLASSE

Méthode 1: définit la variable CLASSPATH.

export CLASSPATH=".:mysql-connector-java-VERSION.jar"
java MyClassFile

Dans la commande ci-dessus, j'ai défini le CLASSPATH sur le dossier actuel et mysql-connector-java-VERSION.fichier jar. Ainsi, lorsque la commande java MyClassFile est exécutée, java application launcher essaiera de charger toute la classe Java dans CLASSPATH. Et il a trouvé que les erreurs Drive class => BOOM avaient disparu.

Méthode 2:

java -cp .:mysql-connector-java-VERSION.jar MyClassFile

Remarque: La Classe.forName ("com.mysql.jdbc.Pilote"); Ceci est obsolète en ce moment 2019 Avr.

J'Espère que cela peut aider quelqu'un!

 1
Author: Nhat Dinh, 2019-04-24 13:12:00

Connexion JDBC MySQL:

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

Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/DatabaseName","Username","Password");         
Statement stmt=con.createStatement();            
stmt = con.createStatement();
ResultSet rs=stmt.executeQuery("Select * from Table");  
 -1
Author: Sarat Chandra, 2017-01-09 17:13:16

Code abrégé

public class DB {

    public static Connection c;

    public static Connection getConnection() throws Exception {
        if (c == null) {
            Class.forName("com.mysql.jdbc.Driver");
            c =DriverManager.getConnection("jdbc:mysql://localhost:3306/DATABASE", "USERNAME", "Password");
        }
        return c;
    }

    // Send data TO Database
    public static void setData(String sql) throws Exception {
        DB.getConnection().createStatement().executeUpdate(sql);
    }

    // Get Data From Database
    public static ResultSet getData(String sql) throws Exception {
        ResultSet rs = DB.getConnection().createStatement().executeQuery(sql);
        return rs;
    }
}
 -1
Author: Corrupted_S.K, 2017-09-17 11:21:34

Télécharger le pilote JDBC

Lien de téléchargement (Sélectionnez indépendant de la plate-forme): https://dev.mysql.com/downloads/connector/j/

Déplacer le pilote JDBC vers le lecteur C

Décompressez les fichiers et passez au lecteur C:\. Votre chemin de pilote devrait être comme C:\mysql-connector-java-8.0.19\mysql-connector-java-8.0.19

Exécutez Votre Java

java -cp "C:\mysql-connector-java-8.0.19\mysql-connector-java-8.0.19\mysql-connector-java-8.0.19.jar" testMySQL.java

TestMySQL.java

import java.sql.*;
import java.io.*;

public class testMySQL {
    public static void main(String[] args) {
    // TODO Auto-generated method stub
        try
        {  
            Class.forName("com.mysql.cj.jdbc.Driver");  
            Connection con=DriverManager.getConnection(  
                "jdbc:mysql://localhost:3306/db?useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC","root","");  
            Statement stmt=con.createStatement();  
            ResultSet rs=stmt.executeQuery("show databases;");  
            System.out.println("Connected");  
        }
        catch(Exception e)
        {
            System.out.println(e);
        }

    }  

}

entrez la description de l'image ici

 -1
Author: Chew Zai, 2020-02-22 11:29:16