360 votes

Connectivité Java avec MySQL

Quelqu'un peut-il m'expliquer comment connecter Java à MySQL ?

1 votes

Voici un court tutoriel vidéo de 3 minutes qui montre comment utiliser MySQL depuis Java. Consultez-le ici : Tutoriel rapide : Connexion à la base de données MySQL à l'aide de Java

533voto

BalusC Points 498232

Voici une explication étape par étape de l'installation de MySQL et de JDBC et de leur utilisation :

  1. Télécharger et installer le serveur MySQL . Il suffit de procéder de la manière habituelle. Souvenez-vous du numéro de port lorsque vous l'avez modifié. Il est par défaut 3306 .

  2. Télécharger le pilote JDBC et mettre dans classpath extraire le fichier ZIP et placer le fichier JAR qu'il contient dans le classpath. Le pilote JDBC spécifique au fournisseur est une implémentation concrète de l'élément API JDBC ( tutoriel ici ).

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

    Si vous effectuez cette opération dans la console de commande, vous devez indiquer le chemin d'accès au fichier JAR dans le champ -cp ou -classpath lors de l'exécution de votre application Java.

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

    Le site . est juste là pour ajouter le actuel dans le classpath afin qu'il puisse localiser com.example.YourClass et le ; est le séparateur de classpath comme sous Windows. Sous Unix et ses clones : doit être utilisé.

  3. Créer un base de données dans MySQL . Créons une base de données javabase .

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

    CREATE USER 'java'@'localhost' IDENTIFIED BY 'd$7hF_r!9Y';
    GRANT ALL ON javabase.* TO 'java'@'localhost' IDENTIFIED BY 'd$7hF_r!9Y';

    Oui, java est le nom d'utilisateur et d$7hF_r!9Y 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 que celle où 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 vous utilisez 127.0.0.1 au lieu de localhost Vous avez résolu le problème, alors vous avez un problème dans votre configuration réseau/DNS/hosts.

    • port : Le port TCP/IP sur lequel le serveur MySQL écoute. Il s'agit par défaut de 3306 .

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

    L'URL final devrait donc ressembler à ceci :

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

    I. Tout d'abord, nous devons charger le pilote JDBC :

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

    Notez que le newInstance() L'appel est pas nécessaire ici. C'est juste pour réparer l'ancien et buggy org.gjt.mm.mysql.Driver . Explication ici . Si cette ligne jette ClassNotFoundException alors le fichier JAR contenant la classe du pilote JDBC n'a tout simplement pas été placé dans le classpath.

    Notez que vous n'avez pas besoin de charger le pilote. chaque fois avant connexion. Une seule fois lors du démarrage de l'application est suffisante.

    II. Alors on peut avoir une connexion :

    String url = "jdbc:mysql://localhost:3306/javabase";
    String username = "java";
    String password = "d$7hF_r!9Y"
    Connection connection = null;
    try {
        System.out.println("Connecting database...");
        connection = DriverManager.getConnection(url, username, password);
        System.out.println("Database connected!");
    } catch (SQLException e) {
        throw new RuntimeException("Cannot connect the database!", e);
    } finally {
        System.out.println("Closing the connection.");
        if (connection != null) try { connection.close(); } catch (SQLException ignore) {}
    }

    Si vous obtenez un SQLException: No suitable driver alors cela signifie que le pilote JDBC n'a pas été chargé du tout ou que l'URL JDBC est erronée (c'est-à-dire qu'elle n'a été reconnue par aucun des pilotes chargés).

    Si vous obtenez un SQLException: Connection refused ou Connection timed out ou une version spécifique de MySQL CommunicationsException: Communications link failure alors cela signifie que le BD 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 incorrect dans l'URL JDBC.
    4. Le serveur DB est en panne.
    5. Le serveur DB 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 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. Rafraîchir le DNS ou utiliser l'adresse IP dans l'URL JDBC à la place.
    3. Vérifiez-le en fonction de my.cnf de la base de données MySQL.
    4. Démarrez le DB.
    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 de manière à ce qu'il ferme les connexions dans le temps. 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 en recevez beaucoup en peu de temps, la base de données risque de manquer de connexions et votre application peut s'arrêter. Il faut toujours acquérir et fermer la Connection dans le cadre le plus court possible dans un try-catch-finally bloc. Fermeture finally est juste pour s'assurer qu'il est fermé aussi en cas d'exception. Ceci s'applique également à Statement , PreparedStatement et ResultSet .

C'est tout ce qu'il y a à dire sur la connectivité. Vous pouvez trouver ici un tutoriel plus avancé sur la façon de charger et de stocker des objets modèles Java complets dans une base de données à l'aide d'une classe DAO de base.

231voto

Sean Owen Points 36577

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

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

ou l'instanciation et la configuration d'un pilote de base de données directement :

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

et ensuite 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();

1 votes

Comment se fait-il que les autres exemples utilisent com.mysql.jdbc.Driver ? cette méthode est-elle meilleure ?

8 votes

Je pense qu'il s'agit de l'ancienne classe Driver qui fonctionne avec l'ancien mécanisme du driver. MysqlDataSource met en œuvre javax.sql.DataSource qui est le mécanisme le plus récent.

0 votes

@SeanOwen +1 pour la bonne explication. Je n'étais pas au courant de cette méthode, car la plupart des gens parlent de DriverManager.

27voto

heffaklump Points 539
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);

0 votes

Qu'est-ce que votre base de données ici ? nom de la base de données ?

0 votes

newInstance() n'est pas nécessaire. L'est-elle ?

0 votes

Non. Ce n'est pas le cas. Et depuis Java 6, toute cette approche est dépassée. Et le nom de la classe du pilote a changé et ....

13voto

Kilian Foth Points 8619

Voici le minimum dont vous avez besoin pour extraire des données d'une base 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. selon vos goûts.

3 votes

Pourquoi avez-vous besoin Class.forName(...).newInstance() ?

8 votes

@mmcrae Vous ne le savez pas, depuis 2007.

2voto

Jwalant Points 31

Vous pouvez voir toutes les étapes pour connecter une base de données MySQL à partir d'une application JAVA. ici . Pour les autres bases de données, il suffit de changer le pilote dans la première étape seulement. Veuillez vous assurer que vous fournissez le bon chemin d'accès à la base de données ainsi que le nom d'utilisateur et le mot de passe corrects.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X