2014-07-21 1 views
1

J'essaie de me connecter à une base de données MySql à partir d'une application de test en Java. Je viens de suivre un tutoriel que j'ai trouvé en ligne. Le code fonctionne (et compile OK), mais je ne peux pas me connecter à la base de données et aller chercher n'importe quoi. Obtenir l'erreur:Java et MySql: la console ajoute '@'% 'au nom d'utilisateur db

1:

Erreur de connexion DB: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Accès refusé pour l'utilisateur '******' @ '%' à la base de données ' ***** _ javaapp ' java.lang.NullPointerException

Pourquoi Java ajoute-t-il les symboles' @ 'et'% 'dans la console? Est-ce la raison pour laquelle je ne peux pas me connecter?

Je ne suis pas en mesure de modifier priveliges sur l'utilisateur db. Il est juste réglé sur "par défaut" Je devine par le fournisseur ISP ...

J'ai discuté de ce problème '@' & '%' avec mon ami, et je comprends que ces symboles sont la syntaxe MySql pour "accepter n'importe quoi" , mais je ne sais toujours pas quoi faire pour le fixer comme mon MySql knowlede est limitée ..

Si je modifie quelques détails dans la connexion db je reçois parfois:

2:

erreur de connexion dB : com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: échec de liaison de communication

Le dernier paquet envoyé avec succès au serveur était il y a 0 millisecondes. Le pilote n'a reçu aucun paquet du serveur. java.lang.NullPointerException

Mon code Ma principale classe:

package test; 

    import java.awt.EventQueue; 

public class Main { 

    private JFrame frame; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 

     // DB CONNECT 
     DBConnect connect = new DBConnect(); 
     connect.getData(); 

     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        Main window = new Main(); 
        window.frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the application. 
    */ 
    public Main() { 
     initialize(); 
    } 

    /** 
    * Initialize the contents of the frame. 
    */ 
    private void initialize() { 
     frame = new JFrame(); 
     frame.setBounds(100, 100, 300, 200); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

} 

Ma classe de connexion:

package test; 

import java.sql.*; 

public class DBConnect { 

private Connection con; 
private Statement st; 
private ResultSet rs; 



public DBConnect() { 

    try { 

     Class.forName("com.mysql.jdbc.Driver"); 

     con = DriverManager.getConnection("jdbc:mysql://mywebhostadress:3306/some_db_name","some_db_user", "somepassword"); 

     st = con.createStatement(); 

    } catch (Exception ex) { 
     System.out.println("Error connecting to DB: " + ex); 
    } 
} 

public void getData() { 
    try { 
     String query = "select * from Client"; 

     rs = st.executeQuery(query); 
     System.out.println("Records from db: "); 

     while (rs.next()) { 
      String org_number = rs.getString("org_number"); 
      String org_name = rs.getString("org_name"); 
      System.out.println("org_number: " + org_number + "org_name: " + org_name); 
     } 

    } catch (Exception exgetData) { 
     System.out.println(exgetData); 
    } 
    } 

} 

Merci pour tous les conseils serviable!

MISE À JOUR:

Hmmm ...

Dans MySQL Workbench je parviens à configurer la connexion OK ... Mais je reçois la même erreur ici:

« Le compte que vous utilisez actuellement ne »

Également, en essayant de transférer l'ingénieur dans MySQL Workbench: ERROR 10 44: Accès refusé pour l'utilisateur « some_db_user » @ « % » à la base de données « nouveau_schema » instruction SQL: CREATE SCHEMA new_schema

J'ai aussi essayé de le faire directement dans phpMyAdmin, mais je peux voir cette erreur sur la page d'accueil:

« Créer une nouvelle base de données - Aucun privilège »

J'ai essayé d'accorder mon défaut (et seulement) l'utilisateur tous les droits que je peux donner, mais qu'il ne soit pas accepté quand je fais une requête dans phpMyAdmin. Je devine c'est pourquoi je ne peux pas y accéder à partir de mon application Java. Mais je pourrais taper quelque chose de mal ...

devrait-il pas:

GRANT ALL PRIVILEGES ON some_db_name * TO 'some_db_user' @ '% de' AVEC OPTION DE SUBVENTION;. ?

(extrait de: this post)

je reçois: Erreur requête SQL: GRANT ALL PRIVILEGES ON some_db_name. * A 'some_db_user '@' %' AVEC GRANT OPTION MySQL a déclaré:

1044 - Accès refusé pour l'utilisateur 'some_db_user '@' %' à la base de données 'some_db_name'

+0

C'est Java, pas JAVA – gprathour

+0

Bon à savoir. Merci pour l'information! – CustomCase

+0

La deuxième erreur est simplement une erreur de connexion. Essayez d'accéder à votre base de données MySQL via le client en ligne de commande MySQL ou Workbench pour vérifier s'il est en place. – ydaetskcoR

Répondre

0

RÉSOLU! J'ai finalement trouvé la solution.

Mon fournisseur d'hébergement avait modifié les paramètres de l'utilisateur par défaut sur leur nouvelle plate-forme. (Je n'étais pas capable de le changer). J'ai fait beaucoup de tests sur plusieurs plates-formes différentes que le fournisseur a à offrir.

-En leur nouveau système, je ne pouvais rien faire parce que l'utilisateur n'a pas automatiquement le droit priviliges ...

Dans leur ancien système, j'ai pu accesss tout (depuis la l'utilisateur avait les droits "dba" (administrateur de base de données).

Merci pour tous les gars d'entrée.

1

L'erreur que vous voyez:

Error connecting to DB: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. java.lang.NullPointerException

est simplement une erreur de connexion. Normalement, je suggère que vous devriez essayer d'accéder à votre base de données MySQL via le client en ligne de commande MySQL ou Workbench pour vérifier si c'est en place mais ici, vous n'avez pas spécifié d'hôte pour le serveur MySQL (car vous avez une erreur de pointeur nul Là).

Vous devrez indiquer correctement votre nom d'hôte dans le formulaire fourni dans l'OP. Donc, pour se connecter à une base de données appelée « some_db_name » sur une instance locale de MySQL en tant que root (avec le mot de passe vide par défaut) vous pouvez utiliser:

con = DriverManager.getConnection("jdbc:mysql://localhost:3306/some_db_name","root", ""); 

La partie @'%' signifie que l'utilisateur peut accéder de partout. Sinon, vous pouvez verrouiller un utilisateur sur une adresse IP ou un nom d'hôte spécifique. Il est possible de créer un rôle d'utilisateur @% avec des privilèges inférieurs à un avec le même nom d'utilisateur mais à une adresse IP spécifique. Ainsi, si cet utilisateur se connecte à cet emplacement, il obtient les rôles de l'IP spécifique. Il n'a aucun rapport avec l'erreur que vous voyez ici et c'est ce que le comportement par défaut est pour tout utilisateur ajouté à moins qu'ils ne soient spécifiquement ajoutés avec un masque d'hôte.

Questions connexes