web-dev-qa-db-fra.com

Connectez Java à une base de données MySQL

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

Quand j'essaye, je reçois

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
306
abson

DriverManager est une manière assez ancienne de faire les choses. Le meilleur moyen consiste à obtenir un DataSource, soit en recherchant celui que votre conteneur de serveurs d'applications a déjà configuré pour vous:

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

ou en instanciant et en configurant directement un à partir de votre pilote de base de données:

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

et ensuite obtenir des connexions, 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();
197
Sean Owen

Voici une explication pas à pas comment installer MySQL et JDBC et comment l’utiliser:

  1. Téléchargez et installez le serveur MySQL . Faites-le comme d'habitude. Rappelez-vous le numéro de port chaque fois que vous l'avez changé. C'est par défaut 3306.

  2. Téléchargez le pilote JDBC et mettez le chemin de classe , extrayez le fichier Zip et placez le fichier JAR contenant le chemin de classe. Le pilote JDBC spécifique au fournisseur est une implémentation concrète de JDBC API ( tutoriel ici ).

    Si vous utilisez un IDE comme Eclipse ou Netbeans, vous pouvez l'ajouter au chemin de classe en ajoutant le fichier JAR en tant que Library à l'élément Chemin de construction dans les propriétés du projet.

    Si vous utilisez "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 Java. application.

    Java -cp.;/Chemin/vers/mysql-connector.jar com.example.YourClass

    Le . est juste là pour ajouter le répertoire actuel au chemin de la classe afin qu'il puisse localiser com.example.YourClass et le ; est le classpath separator tel qu'il est sous Windows. Sous Unix et les clones, : devrait être utilisé.

  3. Créez un base de données dans MySQL . Créons une base de données javabase. Vous voulez bien sûr World Domination, alors utilisons aussi UTF-8.

    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  4. Créer un utilisateur pour Java et accorder il y a accès . Tout simplement parce que 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éterminez l'URL JDBC . Pour connecter la base de données MySQL avec Java, vous avez besoin d'une URL JDBC avec la syntaxe suivante:

    jdbc: mysql: // nomhôte: port/nom de la base de données
    • hostname: nom d'hôte sur lequel le serveur MySQL est installé. S'il est installé sur la même machine que celle où vous exécutez le code Java, vous pouvez simplement utiliser localhost. Il peut également s'agir d'une adresse IP telle que 127.0.0.1. Si vous rencontrez des problèmes de connectivité et que vous utilisez 127.0.0.1 au lieu de localhost, vous avez un problème de configuration réseau/DNS/hôtes.

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

    • databasename: nom de la base de données à laquelle vous souhaitez vous connecter. C'est javabase.

    Donc, l'URL finale devrait ressembler à:

    jdbc: mysql: // localhost: 3306/javabase
  6. Testez la connexion avec MySQL en utilisant Java . Créez une classe Java 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 été chargé automatiquement ou que l’URL JDBC est incorrecte (c’est-à-dire qu’il n’a été reconnu par aucun des pilotes chargés). Normalement, un pilote JDBC 4.0 devrait être chargé automatiquement lorsque vous le déposez dans le chemin d'accès aux classes à l'exécution. 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);
    }
    

    Notez que l'appel newInstance() est pas nécessaire ici. C'est juste pour réparer le vieux et buggé org.gjt.mm.mysql.Driver. Explication ici . Si cette ligne génère ClassNotFoundException, le fichier JAR contenant la classe de pilote JDBC n'est tout simplement pas placé dans le chemin d'accès aux classes.

    Notez qu'il n'est pas nécessaire de charger le pilote à chaque fois avant la connexion. Une seule fois lors du 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, cela signifie que la base de données n'est pas du tout accessible. 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 de base de données est en panne.
    5. Le serveur de base de données n'accepte pas les connexions TCP/IP.
    6. Le serveur de base de données est à court de connexions.
    7. Un élément situé entre Java et la base de données 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 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 la base de données MySQL.
    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 le code en conséquence pour qu'il ferme les connexions dans finally.
    7. Désactivez le pare-feu et/ou configurez pare-feu/proxy pour autoriser/transférer le port.

    Notez que fermer Connection est extrêmement très important. Si vous ne fermez pas les connexions et continuez à en obtenir beaucoup dans un court laps de temps, la base de données risque de manquer de connexions et votre application risque de ne plus fonctionner. Obtenez toujours le Connection dans une instruction try-with-resources) . 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 s'assurer qu'il soit fermé aussi en cas d'exception. Ceci s'applique également à Statement, PreparedStatement et ResultSet.

C'était tout ce qui concernait la connectivité. Vous pouvez trouver ici un tutoriel plus avancé sur la procédure de chargement et de stockage des objets de modèle Java dignes de ce nom dans une base de données à l'aide d'une classe DAO de base.


L'utilisation d'un modèle Singleton pour la connexion à la base de données est une mauvaise approche. Voir entre autres questions: http://stackoverflow.com/q/9428573/ . C'est une erreur de départ n ° 1.

455
BalusC

Initialiser les constantes de la base de données

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

// init database constants
private static final String DATABASE_DRIVER = "com.mysql.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 la stocker pour la réutiliser.

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

Créer des propriétés

L'objet de propriétés 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 en utilisant les constantes et les 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é vos 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é le nom de la base de données, le nom d'utilisateur et le 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.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();

Quelque part d'autre 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();
}

Ceci est tout ) Si quelque chose à améliorer, éditez-le! J'espère que c'est utile.

35
Madan Sapkota
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);
23
heffaklump

Voici le minimum nécessaire 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();

Ajoutez la gestion des exceptions, la configuration, etc. à votre goût.

13
Kilian Foth

Connexion MySQL JDBC 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);
}
4
AJC

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

Vous pouvez voir toutes les étapes pour connecter la base de données MySQL à partir de Java application ici . Pour les autres bases de données, il vous suffit de modifier le pilote dans un premier temps uniquement. Assurez-vous de fournir le bon chemin d'accès à la base de données et de corriger le nom d'utilisateur et le mot de passe.

Visitez http://apekshit.com/t/51/Steps-to-connect-Database-using-Java

3
Jwalant

vous devez avoir le connecteur mysql jar dans votre chemin de classe.

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

avec ci-dessous trois étapes, nous pouvons pouvoir récupérer les données de toute 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");
}
3
kapil das

Connection J'utilisais il y a quelque temps, cela semblait être le moyen le plus simple, mais il y avait également une recommandation à faire, il y a if déclaration- exactement

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

Ou quelque chose comme ça :)

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

2
xxxvodnikxxx

Connexion MySql JDBC:

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");  
0
Sarat Chandra
  • 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 CLASSPATH

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

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

Dans la commande ci-dessus, j'ai défini CLASSPATH sur le dossier actuel et le fichier mysql-connector-Java-VERSION.jar. Ainsi, lorsque la commande Java MyClassFile sera exécutée, le lanceur d’applications Java tentera 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: Class.forName ("com.mysql.jdbc.Driver"); il est déconseillé à ce moment-là le 201 avril.

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

0
Nhat Dinh