Problème connexion MySQL-Java

Résolu/Fermé
Funrobeu - 18 févr. 2009 à 01:15
 Funrobeu - 19 févr. 2009 à 20:32
Bonjour,

je suis étudiant et novice en java. J'ai donc un projet qui consiste à gérer un groupe de personnes via une base de données MySQL installée sur un serveur multiservices CentOS 5.2 distant et mis à jour.
J'ai un utilisateur base_drh avec un mot de passe base_drh qui a tous les droits sur ma base de données MySQL appelée également base_drh. J'ai fait exprès de donner le même nom à tout pour éviter de me perdre durant mes tests.
J'ai installé phpMyAdmin sur ce serveur pour administrer ma base de données et j'ai aucun problème pour me connecter, faire des créations,ajouts,modifications et suppressions.
Sur mon serveur CentOS, voici les paquets que j'ai concernant mysql et jav :

root@sd-692 ~# rpm -qa | grep mysql
php-mysql-5.1.6-20.el5_2.1
mysql-server-5.0.45-7.el5
mysql-5.0.45-7.el5
root@sd-692 ~# rpm -qa | grep java
java-1.6.0-openjdk-1.6.0.0-1.0.b12.el5.2
tzdata-java-2007k-0.3.el5

Aucun problème jusque là.

Sur mon Eclipse,j'installe le connecteur mysql-connector-java-5.1.7-bin.jar que j'ai installé en faisant click droit sur mon Projet/Properties/JavaBuild Path/Libraries/Add External JARs et pas de problèmes.

Voici mon code java dans Eclipse

import java.io.*;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;

public class SqlRequete {

public SqlRequete()
{
}

public static void main(String[] args)
{
Connection connection;
BaseDeDonnee basededonnee = new BaseDeDonnee();
}
}

class BaseDeDonnee
{
Connection connection = null;

public BaseDeDonnee()
{
connexion();
//affichage();
fin_connexion();
}

// Connexion à la base de donnees
public void connexion ()
{
try
{
// Chargement des drivers SQL
System.out.println("\n------------------------");
System.out.println("Connexion au driver JDBC.");
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("Driver com.mysql.jdbc.Driver chargé.");
}
catch (ClassNotFoundException a)
{
System.out.println ("Driver non trouve.");
}
catch (Exception b)
{
System.out.println ("Problème sur chargement de driver JDBC.");
}

try
{
// Etablissement de la connexion avec la base
connection = DriverManager.getConnection("jdbc:mysql://hostname_de_mon_serveur:3306/base_drh","base_drh","base_drh");
System.out.println("Connexion a la base établie.");
System.out.println("------------------------\n");
}
catch (SQLException c)
{
System.out.println ("Connexion refuse ou base inconnue.");
System.out.println("SQLException: " + c.getMessage());
System.out.println("SQLState: " + c.getSQLState());
System.out.println("SQLIterator: " + c.iterator());
System.out.println("ErrorCode: " + c.getErrorCode());
System.out.println("");
}
catch (Exception d)
{
System.out.println ("Problème sur connexion.");
}
}
/*public void affichage()
{
//ResultSet rs = null;
try
{
// Exécution des requêtes
//Statement stmt = connection.createStatement();
//String requete = null;
//requete = "INSERT INTO `table` ( `champ` ) VALUES ( 'EGG' )";
//requete = "SELECT * FROM `table` ORDER BY `champ` ASC LIMIT 0 , 30";
//rs = stmt.executeQuery(requete);

Statement stmt = connection.createStatement() ;
String queryString = "INSERT INTO `table` ( `champ` ) VALUES ( 'EGG' )";
int update = stmt.executeUpdate(queryString);
System.out.println (update);
//while (rs.next())
// {
// Affichage les resultats de la requete SQL
//System.out.println("Champ : "+rs.getString(1));
//System.out.println("Prenom : "+rs.getString(2));
//System.out.println("Adresse : "+rs.getString(3));
//System.out.println("");
// }
}
catch (Exception d)
{
System.out.println ("Problème de la requete.");
}
}*/
public void fin_connexion()
{
try
{
// Fermeture de la connexion
connection.close();
System.out.println("\n------------------------");
System.out.println ("Fermeture de connexion.");
System.out.println("------------------------\n");
}
catch (Exception d)
{
System.out.println ("Problème sur la fermeture de connexion.");
}
}
}


Il n'y a aucune erreur de code détectée par Eclipse. Toutefois, je n'arrive pas à me connecter à la base MySQL et je ne comprends pas pourquoi. Voici les erreurs de connexion SQL qui me sont renvoyés en console :


------------------------
Connexion au driver JDBC.
Driver com.mysql.jdbc.Driver chargé.
Connexion refuse ou base inconnue.
SQLException: null, message from server: "Host 'monpc.freebox.fr' is not allowed to connect to this MySQL server"
SQLState: HY000
SQLIterator: java.sql.SQLException$1@86f241
ErrorCode: 1130

Problème sur la fermeture de connexion.




Mon fichier /etc/my.cnf ressemble à ça :
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Dans mon fichier /etc/hosts.allow, j'ai ça :
MYSQLD: ALL
A voir également:

1 réponse

Bonsoir,

j'ai trouvé la solution tout seul et je la mets en ligne.

D'abord, cela venait du fait que mon utilisateur base_drh correspondait au client localhost. C'est à dire que je ne pouvais me connectais à ma base MySQL uniquement à partir d'un client présent en localhost. Donc impossibilité pour moi de me connecter à partir d'un client distant.

# mysql -u root -p

// Je supprime mon utilisateur base_drh de ma BB qui s'appelle aussi base_drh

mysql> REVOKE ALL PRIVILEGES ON base_drh.* FROM base_drh@localhost;
use mysql;
DELETE FROM user WHERE `user`='base_drh';
flush privileges;

Ensuite je recrée mon utilisateur pour qu'il puisse se connecter de n'importe quel client distant.

mysql> use mysql;
mysql> GRANT ALL ON base_drh.* to base_drh@'%' IDENTIFIED by 'base_drh';
mysql> flush privileges;

En fait, c'est le % qui permet à notre utilisateur de se connecter de n'importe quel poste distant.
Pour vérifier votre problème, connecter à votre à la base mysql ( use mysql) et vérifier la table user avec les champs hostname, user, et password.

Voili voilou
1