Bonjour,
Permettez-moi de vous faire part de mon problème. J’ai créé sur un serveur Linux, une database mysql dans laquelle se trouve la table job-sheet. J’ai créé un user (« user ») avec un mot de passe (« mdp ») avec tout les accès nécessaires.
J’accède sans problème via la ligne commande ssh à la table job-sheet avec ce user, le serveur fonctionne donc.
J’ai créé un programme php qui accède à la table en s’exécutant sur le serveur et se connecte en local (localhost) sur le serveur avec le user, cela va sans problème.
if(($dbLink = mysql_connect("localhost", "user", "mdp")))
{
if(mysql_select_db("job-sheet ", $dbLink))
{...
Jusque là tout va bien.
J’ai créé un programme Java qui tourne sur une autre machine que je nommerai ‘client’. Dans ce programme j’accède à un fichier se trouvant sur le serveur.
URL url = new URL("http://192.168.50.100/process/bR3doT4s");
URLConnection uc = url.openConnection();
InputStream in = uc.getInputStream();
…
Cela fonctionne bien (la connexion physique client-serveur fonctionne donc)
Dans un autre programme Java, je tente d’accéder à la table, et là, cela ne fonctionne pas.
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
public class Testconnection
{
public static void main(String[] args)
{
Connection conn = null;
String host = null;
String login = null;
String pw = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
}
catch (java.lang.ClassNotFoundException e)
{
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());
}
catch(Exception e)
{
e.printStackTrace();
}
host = "jdbc:mysql://192.168.50.100/job-sheet ";
login = "user";
pw = "mdp";
try
{
conn = DriverManager.getConnection(host,login,pw);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
J’ai ce message d’erreur :
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: java.net.ConnectException: Connection refused: connect
STACKTRACE:
java.net.SocketException: java.net.ConnectException: Connection refused: connect
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:156)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:284)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2565)
at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at Testconnection.main(Testconnection.java:33)
** END NESTED EXCEPTION **
Last packet sent to the server was 32 ms ago.
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2631)
at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at Testconnection.main(Testconnection.java:33)
Press any key to continue...
Je tourne ce programme en local sur la machine client. J’y ai créé avec phpMyAdmin une db et un user identique à ce qui se trouve sur le serveur, cela fonctionne. J’ai simplement modifié la ligne
host = "jdbc:mysql://localhost/job-sheet ";
Le driver est donc correctement installé
J’ai lu que c’est peut-être le port et le socket qui doivent être indiqué, j’ai exécuté cette commande dans le ssh sur le serveur :
netstat -l | grep mysql
pour obtenir :
unix 2 [ ACC ] STREAM LISTENING 4319 /var/run/mysqld/mysqld.sock
Dois-je en conclure que c’est le port 4319 et le socket /var/run/mysqld/mysqld.sock qu’il utilise ?
J’ai bien sur essayé :
host = "jdbc:mysql://192.168.50.100 :4319/job-sheet ";
Cela ne fonctionne pas.
(j’ignore comment indiquer le socket dans le programme Java)
D’autre part, sur le serveur, dans le fichier "/etc/mysql/my.cnf », il est noté :
port = 3306
J’ai bien sur également essayé :
host = "jdbc:mysql://192.168.50.100 :3306/job-sheet ";
Cela ne fonctionne pas non plus.
Connaissez-vous d’autres pistes que je n’aurais pas encore explorées ?
Merci d’avance.