2016-12-06 1 views
0

J'essaie d'exécuter des requêtes sur une base de données mysql sur une machine distante. Je n'ai pas d'accès administrateur sur cette machine distante, j'ai donc besoin d'authentifier mes informations d'identification sur cette machine avant de pouvoir accéder à la base de données (qui nécessite également mon nom d'utilisateur et mon mot de passe). Après avoir lu ce post (Read remote file in java which needs username and password), je peux voir comment j'utiliserais l'authentification pour accéder à la machine distante et je suis familier avec l'utilisation de DriverManager pour exécuter des requêtes sur une base de données locale; Je ne suis pas sûr de savoir comment je peux combiner les deux fonctionnalités. Aucune suggestion?Interrogation d'une base de données sql sur une machine distante en utilisant le code java

+0

Généralement, base de données mysql authentique ion sur la machine distante est différent de l'authentification sur la machine distante. Cela signifie que mysql a son propre nom d'utilisateur et mot de passe et vous devriez être en mesure de se connecter avec le serveur mysql distant en utilisant ce nom d'utilisateur et mot de passe. L'authentification sur la machine distante ne devrait pas être requise. –

+0

Oh, c'est bon à savoir. Donc, si j'obtiens une erreur 'accès refusé' lors de l'utilisation de l'authentification mysql avec DriverManager.getConnection (...) quelle pourrait être la cause de l'erreur? – user97468

Répondre

0

Il semble que l'utilisateur que vous utilisez pour la connexion avec la base de données MySQL ne dispose pas de privilèges d'accès à distance, vous devez donc d'accorder l'accès à distance à cet utilisateur.

Execute requêtes suivantes sur le serveur MySQL comme root utilisateur pour créer un nouvel utilisateur et autoriser l'accès à distance à cet utilisateur -

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'; 

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION; 

CREATE USER 'username'@'%' IDENTIFIED BY 'password'; 

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION; 

FLUSH PRIVILEGES; 

Commentaire ci-dessous ligne dans le fichier /etc/mysql/my.cnf -

bind-address = 127.0.0.1 

et redémarrez MySQL serveur -

sudo service mysql restart 
+0

Vous devez vous lier à l'adresse IP externe pour obtenir un accès à distance. –

+0

Merci, cela s'est avéré être le problème! la base de données n'a pas été configurée pour l'accès à distance – user97468

0

Utilisez JDBC http://docs.oracle.com/javase/tutorial/jdbc/basics/index.html. Comment avez-vous exécuté les requêtes MySQL auparavant? En JDBC vous accédez à des machines distantes comme la locale (EDIT: en code).

EDIT: Le tutoriel est un peu riche en informations, voici donc un code pour vous aider à démarrer:

static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
private static Connection co; 
private Statement st; 

public void connectDb(){ 
    try{ 
     String url = "jdbc:mysql://localhost/dataset"; //url to _DATABASE_ create as mysqlroot first! 
    String user = "theuser"; 
    String password = "thepassword"; 

    Class.forName("com.mysql.jdbc.Driver"); 
    co = DriverManager.getConnection(url, user, password); 
    st = co.createStatement(); 
    co.setAutoCommit(false); 
} catch(Exception e){ 
    e.printStackTrace(); 
} 
} 

Vous devez obtenir le pilote JDBC avant de pouvoir utiliser ce (voir tutoriel)!

Voici comment vous pouvez exécuter une requête:

private ResultSet executeQuery(String query){ 
    ResultSet rs = null; 
    try{ 
     rs = st.executeQuery(query); 
     return rs; 
     } catch(Exception e){ 
      System.out.println(query); 
      e.printStackTrace(); 
     } 
    return rs; 
} 

Et voici comment une mise à jour pourrait être exécuté, notez la différence entre une mise à jour et une requête!

private void executeUpdate(String query){ 
    try{ 
     st.executeUpdate(query);//data manipulation = executeUpdate 
     } catch(Exception e){ 
      System.out.println(query); 
      e.printStackTrace(); 
     } 
} 

Hope this helps ^^ - d

+0

C'est à peu près le code que j'utilise pour interroger des bases de données locales; Cependant, lorsque j'essaie d'interroger une base de données distante (en changeant localhost sur l'adresse IP du serveur distant), j'obtiens une erreur 'accès refusé pour '. – user97468

+0

Salut à nouveau, vous devez connaître les informations d'identification et la base de données doit être configurée de sorte qu'il peut être consulté avec ces informations d'identification et à distance. Donc, vous devriez vous connecter avec un administrateur. Cela pourrait aider l'administrateur: http://stackoverflow.com/questions/6239131/how-to-grant-remote-access-permissions-to-mysql-server-for-user et http://stackoverflow.com/questions/ 16287559/mysql-add-user-for-remote-access espérons que cela vous aide ^^ –