Voici une explication étape par étape pour installer MySQL et JDBC et comment les utiliser :
-
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
. -
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 localisercom.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é. -
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;
-
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 lepassword
est le mot de passe ici. -
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 utiliserlocalhost
. Il peut également s'agir d'une adresse IP telle que127.0.0.1
. Si vous rencontrez des problèmes de connectivité et utilisez127.0.0.1
au lieu delocalhost
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éfaut3306
. -
databasename
:Le nom de la base de données à laquelle vous souhaitez vous connecter. C'estjavabase
.
L'URL finale devrait donc ressembler à :
jdbc:mysql://localhost:3306/javabase
-
-
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èveClassNotFoundException
, 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
ouConnection timed out
ou uneCommunicationsException: 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 :- L'adresse IP ou le nom d'hôte dans l'URL JDBC est incorrect.
- Le nom d'hôte dans l'URL JDBC n'est pas reconnu par le serveur DNS local.
- Le numéro de port est manquant ou erroné dans l'URL JDBC.
- Le serveur de base de données est en panne.
- Le serveur de base de données n'accepte pas les connexions TCP/IP.
- Le serveur de base de données n'a plus de connexions.
- 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 :
- Vérifiez et testez-les avec
ping
. - Actualisez le DNS ou utilisez plutôt l'adresse IP dans l'URL JDBC.
- Vérifiez-le en fonction de
my.cnf
de la base de données MySQL. - Démarrez la base de données.
- Vérifiez si mysqld est démarré sans l'option
--skip-networking option
. - Redémarrez la base de données et corrigez votre code en conséquence pour qu'il ferme les connexions dans
finally
. - 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 laConnection
dans untry-with-resources
déclaration . Ou si vous n'êtes pas encore sur Java 7, fermez-le explicitement dansfinally
d'untry-finally
bloc. Fermeture dansfinally
est juste de s'assurer qu'il se ferme également en cas d'exception. Ceci s'applique également àStatement
,PreparedStatement
etResultSet
.
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.