Mysql
 sql >> Base de données >  >> RDS >> Mysql

Connecter Java à une base de données MySQL

Voici une explication étape par étape pour installer MySQL et JDBC et comment les utiliser :

  1. Télécharger 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écharger le pilote JDBC et mis dans classpath , extrayez le fichier ZIP et placez le fichier JAR contenant dans le chemin de classe. Le pilote JDBC spécifique au fournisseur est une implémentation concrète de API JDBC (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 Bibliothèque au chemin de compilation 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 le -cp ou -classpath argument lors de l'exécution de votre application Java.

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

    Le . est juste là pour ajouter le courant répertoire au classpath également afin qu'il puisse localiser com.example.YourClass et le ; est le séparateur de chemin de classe tel qu'il est dans Windows. Sous Unix et clones : doit être utilisé.

  3. Créer une base de données dans MySQL . Créons une base de données javabase . Vous voulez bien sûr la domination mondiale, alors utilisons également UTF-8.

    CREATE DATABASE javabase DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  4. Créer un utilisateur pour Java et subvention y accéder . Tout simplement parce qu'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 le password est le mot de passe ici.

  5. Déterminer l'URL JDBC . Pour connecter la base de données MySQL à l'aide de 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 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 utilisez 127.0.0.1 au lieu de localhost résolu, alors vous avez un problème dans votre configuration réseau/DNS/hôtes.

    • 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 à laquelle vous souhaitez vous connecter. C'est javabase .

    L'URL finale devrait donc ressembler à :

    jdbc:mysql://localhost:3306/javabase
  6. Tester la connexion à MySQL en utilisant Java . Créez une classe Java simple avec un main() méthode 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 une SQLException: No suitable driver , cela signifie soit que le pilote JDBC n'a pas été chargé automatiquement, soit que l'URL JDBC est erronée (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 le chemin de classe d'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 le newInstance() l'appel n'est pas nécessaire ici. C'est juste pour réparer l'ancien et bogué org.gjt.mm.mysql.Driver . Explication ici . Si cette ligne lève ClassNotFoundException , le fichier JAR contenant la classe du 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 liaison. Une seule fois au démarrage de l'application suffit.

    Si vous obtenez une SQLException: Connection refused ou Connection timed out ou une CommunicationsException: Communications link failure spécifique à MySQL , cela signifie que la base de données n'est pas accessible du tout. 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 erroné 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 n'a plus de connexions.
    7. Quelque chose entre Java et DB bloque les connexions, par ex. 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 en fonction de my.cnf de la base de données MySQL.
    4. Démarrez la base de données.
    5. Vérifiez si mysqld est démarré sans l'option --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ésactivez le pare-feu et/ou configurez le pare-feu/proxy pour autoriser/transférer le port.

    Notez que la fermeture de la Connection est extrêmement important. Si vous ne fermez pas les connexions et que vous continuez à en obtenir beaucoup en peu de temps, la base de données peut manquer de connexions et votre application peut tomber en panne. Toujours acquérir la Connection dans un try-with-resources déclaration . Ou si vous n'êtes pas encore sur Java 7, fermez-le explicitement dans finally d'un try-finally bloc. Fermeture dans finally est juste de s'assurer qu'il se ferme également en cas d'exception. Ceci s'applique également à Statement , PreparedStatement et ResultSet .

C'était tout en ce qui concerne les problèmes de connectivité. Vous pouvez trouver ici un tutoriel plus avancé sur le chargement et le stockage d'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ébutant #1.