Java.sql.SQLException

champion2 Messages postés 20 Statut Membre -  
Reivax962 Messages postés 3742 Statut Membre -
Bonjour!jè un interface utilisateur afin qu'un utilisateur puisse s'identifier pour se connecter a la base de données phpMyAdmin et accéder au menu principal de l'application
dans ma table user jè saisie des users et leur mot de passe dans dans privilège de phpMyAdmin mais quand je rentre les données d'user qui existe dans base de donnée et je valide je recois un message d'erreur aider moi

29 sept. 2011 11:07:04 connexion.Frm_connexion connexion_actionPerformed
GRAVE: null
java.sql.SQLException: Accès refusé pour l'utilisateur: ''@'@localhost' (mot de passe: NON)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:910)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3923)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1273)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2031)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at connexion.Frm_connexion.getConnection(Frm_connexion.java:61)
at connexion.Frm_connexion.connexion_actionPerformed(Frm_connexion.java:119)
at connexion.Frm_connexion.access$000(Frm_connexion.java:40)
at connexion.Frm_connexion$1.actionPerformed(Frm_connexion.java:80)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6289)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6054)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4652)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4482)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4482)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
at java.awt.EventQueue.access$000(EventQueue.java:85)
at java.awt.EventQueue$1.run(EventQueue.java:603)
at java.awt.EventQueue$1.run(EventQueue.java:601)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:617)
at java.awt.EventQueue$2.run(EventQueue.java:615)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

7 réponses

Utilisateur anonyme
 
Bonjour,

Montrez-nous la requête SQL, elle doit contenir une erreur vue l'exception.
Zébulon
0
champion2 Messages postés 20 Statut Membre
 
mon code pour la connexion:

public boolean getConnection(String jnom,String jpwd)throws Exception{
Connection conn=null; ResultSet rs=null; Statement st=null;
String url="jdbc:mysql://localhost/bd_produit?";

Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(url);
//Class.forName("org.gjt.mm.mysql.Driver");
if(conn==null) return (false);

String requete="select * from user where(nom_us='"+jnom+"' and password_us='"+jpwd+"')";
st=conn.createStatement();
rs=st.executeQuery(requete);
if(rs.next()) return (true);
else return (false);
}

//JTextField jnom et JPasswordField pwd

private void connexion_actionPerformed(ActionEvent e) {
try{
if(getConnection(jnom.getText(),jpwd.getText())){
System.out.println("CONNEXION REUSSI! ");
// this.setVisible(false);
Frm_produit fp=new Frm_produit();
fp.setVisible(true);
}
else{
// System.out.println("ERREUR DE CONNEXION");
JOptionPane.showMessageDialog(null,"nom user ou password incorrecte","erreur de connexion",2);
}
}
catch(Exception ex){
Logger.getLogger(Frm_connexion.class.getName()).log(Level.SEVERE,null,ex);
//ex.printStackTrace();
}
}
0
Utilisateur anonyme
 
Il ne manquerait pas un espace en where et ( ici ?

String requete="select * from user where (nom_us='"+jnom+"' and password_us='"+jpwd+"')";
0
Reivax962 Messages postés 3742 Statut Membre 1 011
 
Bonjour,

Le problème ne vient pas de la requête, mais de la connexion à la base de données elle-même, qui est refusée à ton programme.

Quand tu écris :
Connection conn=null; ResultSet rs=null; Statement st=null;
String url="jdbc:mysql://localhost/bd_produit?";

Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(url); 


Tu ne fournis aucun identifiant de connexion à ta base.
C'est d'ailleurs bien ce qui est dit dans le message d'erreur :
« Accès refusé pour l'utilisateur: ''@'@localhost' (mot de passe: NON) »
Un nom d'utilisateur vide, pas de mot de passe.

Je ne connais pas la syntaxe java / jdbc pour spécifier utilisateur / mot de passe de la connexion à la base, je te laisse chercher ça.

Xavier
0
sakoba2010 Messages postés 165 Statut Membre 15
 
Reivax962 a raison, la chaîne de connexion est incorrecte, tu utilise une base de données MySql alors il faut un nom d'utilisateur et un mot de passe pour y accéder. remplaces
conn=DriverManager.getConnection(url); 

par ça
conn=DriverManager.getConnection(url,"utilisateur","mot de passe"); 

Inspires toi de ce programme:
http://sakoba.byethost13.com/2011/02/10/java-how-to-connect-to-database/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
champion2 Messages postés 20 Statut Membre
 
bonsoir merci de aide mais j'ai une préocupation pour ma connexion car je voudrais qu'un utilisateur quelconque qui existe dans ma base de données puisse pouvoir se connecter sinon avec ce code ci dessous il nya que le user root qui peut se connecter comment faire pour n'importe quel user qui existe dans la base de données?
mon code:

public boolean getConnection()throws Exception{
Connection conn=null; ResultSet rs=null; Statement st=null;
String url="jdbc:mysql://localhost:3306/bd_produit?";
//jnom="root "; jpwd="mebf2011$";
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(url,"root","mebf2011$");
//Class.forName("org.gjt.mm.mysql.Driver");
if(conn==null) return (false);

String requete="select * from user"; /*where(nom_us='"+jnom+"' and password_us='"+jpwd+"')";*/
st=conn.createStatement();
rs=st.executeQuery(requete);
if(rs.next()) return (true);
else return (false);
}

private void connexion_actionPerformed(ActionEvent e) {
/*if(getConnection(jnom.getText(),jpwd.getText()))*/
try{
if(getConnection()/*(jnom.getText(),jpwd.getText())*/){
System.out.println("CONNEXION REUSSI! ");
// this.setVisible(false);
Frm_produit fp=new Frm_produit();
fp.setVisible(true);
}
else{
// System.out.println("ERREUR DE CONNEXION");
JOptionPane.showMessageDialog(null,"nom user ou password incorrecte","erreur de connexion",2);
}
}
catch(Exception ex){
Logger.getLogger(Frm_connexion.class.getName()).log(Level.SEVERE,null,ex);
//ex.printStackTrace();
}
}
0
Reivax962 Messages postés 3742 Statut Membre 1 011
 
Bonjour,

Tu confonds deux choses :
- La connexion d'un utilisateur à ton programme ;
- La connexion de ton programme à ta base de données.

La base de données n'est jamais en accès libre, il faut que ton programme donne des identifiants. Tu peux en créer d'autres que root (c'est d'ailleurs conseillé : chaque programme qui se connecte devrait avoir des droits d'accès spécifiques et restreints). Tu peux faire ça en utilisant l'interface de phpMyAdmin, sur le premier écran avant de choisir une base de données...

Cela ne préjuge en rien des identifiants que l'utilisateur devra fournir pour utiliser ton programme : cette partie de ton code reste valable (je parle de la première version, pas de celle modifiée qui, du coup est fausse ! Tes jnom et jpwd ne devaient pas changer comme tu l'as fait.)

Xavier
0
soldatdebut Messages postés 3 Statut Membre
 
bonjour je cherche comment afficher le résultat de ma requête dans formulaire
mon code:

//affiche l'enregistrement précédent:

public void jprecedent()throws Exception{
/*String pref=null;String pdesignation=null; double pprix=0;
pref=jref.getText();
pdesignation=jdesigne.getText();
pprix=Double.parseDouble(jprix.getText());*/
/*if(conn==null){*/
try{
Class.forName("org.gjt.mm.mysql.Driver");
Class.forName("com.mysql.jdbc.Driver");

String url="jdbc:mysql://localhost/bd_produit?";
conn=DriverManager.getConnection(url);

st= conn.createStatement();
String requete="select * from produit";
rs=st.executeQuery(requete);
rs.afterLast();

while(rs.previous()){

System.out.println(rs.getString("ref"));
System.out.println(rs.getString("designation"));
System.out.println(rs.getDouble("prix"));
}
// rs.close();
}
catch(SQLException ex){
JOptionPane.showMessageDialog(null,"anomalie lors de l'execution de la requete","Erreur",JOptionPane.ERROR_MESSAGE);
}

finally{
if(st!=null){
try{
st.close();
}
catch(SQLException ex){
ex.printStackTrace();
}
}
if(rs!=null){
try{
rs.close();
}
catch(SQLException ex){
ex.printStackTrace();
}
}
if(conn!=null){
try{
conn.close();
}
catch(SQLException ex){
ex.printStackTrace();
}
}

}

}

//affiche le dernier enregistrement :

public void jlast()throws Exception{
/*String pref=null;String pdesignation=null; double pprix=0;
pref=jref.getText();
pdesignation=jdesigne.getText();
pprix=Double.parseDouble(jprix.getText()); */
try{
Class.forName("org.gjt.mm.mysql.Driver");
Class.forName("com.mysql.jdbc.Driver");

String url="jdbc:mysql://localhost/bd_produit?";
conn=DriverManager.getConnection(url);
st=conn.createStatement();
String requete="select* from produit";
rs=st.executeQuery(requete);

while(rs.last()){
System.out.println(rs.getString("ref"));
System.out.println(rs.getString("designation"));
System.out.println(rs.getDouble("prix"));
}

}
catch(SQLException ex){
JOptionPane.showMessageDialog(null,"anomalie lors de l'execution de la requete","Erreur",JOptionPane.ERROR_MESSAGE);
}

finally{
if(st!=null){
try{
st.close();
}
catch(SQLException ex){
ex.printStackTrace();
}
}
if(rs!=null){
try{
rs.close();
}
catch(SQLException ex){
ex.printStackTrace();
}
}
if(conn!=null){
try{
conn.close();
}
catch(SQLException ex){
ex.printStackTrace();
}
}

}

}
0
Reivax962 Messages postés 3742 Statut Membre 1 011
 
Bonjour,

Pour augmenter tes chances de réponse, je te suggère de :
1 - Poser tes questions dans un message dédié plutôt que sur le fil d'un autre internaute. Sinon, quand il aura sa réponse, il passera le sujet en « corrigé » et plus personne ne viendra voir ton message...) ;
2 - les balises < code> du forum permettent d'afficher le code de façon plus simple ;
3 - plutôt que de balancer une tartine de code en disant plus ou moins « aidez-moi », essaie d'être plus explicite sur ce que tu veux faire, pourquoi tu n'y arrives pas, et à quel endroit de ton code tu veux le faire (surtout quand tu mets autant de lignes de code...)

Merci,

Xavier
0