Drop user supprime pas

cs_thanatos67 Messages postés 51 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 13 novembre 2008 - 10 févr. 2007 à 14:40
cs_thanatos67 Messages postés 51 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 13 novembre 2008 - 13 févr. 2007 à 14:06
Bonjour à tous.
Je suis en 2eme année de BTS IRIS et j'ai comme projet la création d'une IHM en java permettant de visualiser des données venants de capteurs meteorologiques, ainsi qu'une base Mysql pour ces fameuses données.
J'ai une classe "meteorologie" qui a deux parties (visualisation de données/gestion d'utilisateurs) ainsi qu'une base de données base_meteo dans laquelle se trouve la table utilisateurs et la table annees (avec les données meteorologique par années). Dans la partie gestion je peux créer un utilisateur de l'application avec des droits d'admin ou de simple user. Et je crée par la même occasion un utilisateur Mysql avec juste le droit "SELECT" si je selection le Checkbox "user" ou bien "ALL PRIVILEGES"
en selectionnant admin. La création fonctionne sans problème, mais lorsque je veux en supprimer un, il n'est supprimé que dans la table "utilisateur", pas en tant qu'utilisateur Mysql. Je vais mettre les bout de code pour la création et la suppression.

CREATION (fonctionne sans problème):

if((sSave_log!= "") && (sSave_pass!="") && (jTFSave_pass.getText().equals(jTFValid_pass.getText())) && (jCBAdmin.isSelected() || jCBUser.isSelected())){
                        /*Ajout d'utilisateur de l'application dans la base meteo
                         *
                         */
                        try{
                            String sql = "insert into utilisateurs (nom, pass, droits) values (?,?,?)";
                            if(jCBAdmin.isSelected()){
                                droit = "admin";
                            }
                            if(jCBUser.isSelected()){
                                droit = "user";
                            }
                            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/base_meteo?user=root&password=thana67");
                            stmt = conn.prepareStatement(sql);
                            stmt.setString(1, jTFSave_log.getText());
                            stmt.setString(2, jTFSave_pass.getText());
                            stmt.setString(3, droit);
                            stmt.executeUpdate();
                        }
                        catch(SQLException ex){
                            JOptionPane.showMessageDialog(null, "Utilisateur existant", "Message d'avertissement", JOptionPane.ERROR_MESSAGE);
                            System.out.println("SQLException: " + ex.getMessage());
                            System.out.println("SQLState: " + ex.getSQLState());
                            System.out.println("VendorError: " + ex.getErrorCode());
                        }
                        /*Ajout d'utilisateur de la base mysql
                         *
                         */
                        try{
                            String sql = "insert into utilisateurs (nom, pass, droits) values (?,?,?)";
                            if(jCBAdmin.isSelected()){
                                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/base_base_meteo?user=root&password=thana67");
                                sql = "grant all privileges on meteo.* to '"+sSave_log+"'@'localhost' identified by'"+sSave_pass+"'with grant option;";
                                stmt = conn.prepareStatement(sql);
                                stmt.executeUpdate();
                                sql = "grant all privileges on meteo.* to '"+sSave_log+"'@'%' identified by'"+sSave_pass+"'with grant option;";
                                stmt = conn.prepareStatement(sql);
                                stmt.executeUpdate();
                            }
                            if(jCBUser.isSelected()){
                                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/base_meteo?user=root&password=thana67");
                                sql = "grant select on meteo.* to '"+sSave_log+"'@'localhost' identified by'"+sSave_pass+"';";
                                stmt = conn.prepareStatement(sql);
                                stmt.executeUpdate();
                                sql = "grant select on meteo.* to '"+sSave_log+"'@'%' identified by'"+sSave_pass+"';";
                                stmt = conn.prepareStatement(sql);
                                stmt.executeUpdate();
                            }
                        }
                        catch(SQLException ex){
                            JOptionPane.showMessageDialog(null, "Utilisateur existant", "Message d'avertissement", JOptionPane.ERROR_MESSAGE);
                            System.out.println("SQLException: " + ex.getMessage());
                            System.out.println("SQLState: " + ex.getSQLState());
                            System.out.println("VendorError: " + ex.getErrorCode());
                        }
                    }
                    else{
                        JOptionPane.showMessageDialog(null, "Mauvaise saisie", "Message d'avertissement", JOptionPane.ERROR_MESSAGE);
                    }

Suppression :

String sSup_user = jTFSupp_user.getText();
                    String sql;
                    if(sSup_user!=""){
                        /*
                         * Suppression de l'utilisateur dans la base meteo
                         */
                        try{
                            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/base_meteo?user=root&password=thana67");
                            stmt = conn.prepareStatement("delete from utilisateurs where nom='"+sSup_user+"';");
                            stmt.executeUpdate();
                            System.out.println("Suppression reussi");
                        }
                        catch(SQLException ex){
                            System.out.println("SQLException: " + ex.getMessage());
                            System.out.println("SQLState: " + ex.getSQLState());
                            System.out.println("VendorError: " + ex.getErrorCode());
                        }
                        /*Suppression des droits de l'utilisateur Mysql
                         *
                         */
                        try{
                            sql = "revoke all privileges on meteo.* from '"+sSup_user+"'@'%';";
                            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/base_meteo?user=root&password=thana67");
                            stmt = conn.prepareStatement(sql);
                            stmt.executeUpdate();
                        }
                        catch(SQLException ex){
                            System.out.println("SQLException: revoke");
                        }
                        try{
                            sql = "revoke all privileges on meteo.* from '"+sSup_user+"'@'localhost';";
                            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/base_meteo?user=root&password=thana67");
                            stmt = conn.prepareStatement(sql);
                            stmt.executeUpdate();
                        }
                        catch(SQLException ex){
                            System.out.println("SQLException: revoke");
                        }
                        try{
                            sql = "flush privileges;";
                            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/base_meteo?user=root&password=thana67");
                            stmt = conn.prepareStatement(sql);
                            stmt.executeUpdate();
                        }
                        catch(SQLException ex){
                            System.out.println("SQLException: flush privileges");
                        }
                        try{
                            sql = "drop user '"+sSup_user+"'@'%';";
                            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/base_meteo?user=root&password=thana67");
                            stmt = conn.prepareStatement(sql);
                            stmt.executeUpdate();
                        }
                        catch(SQLException ex){
                            System.out.println("SQLException: drop user");
                        }
                    }

 J'ai mis en rouge ce qui ne semble pas marcher. Je précise que je n'ai aucun message d'erreur dans la console d'ECLIPSE. Merci pour votre aide.

au bout du clavier...

4 réponses

shaiulud Messages postés 404 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 15 juillet 2014 22
12 févr. 2007 à 11:45
Je pense qu'avant ton problème technique, tu as un problème de conception dans ton application.

* au niveau du SGBD : tu devrais utiliser un compte "base météo" qui peut accéder aux tables de métrologie et utilisateur (de ta base métrologie et non de mysql); Cela t'évitera d'utiliser ROOT.

* au niveau de tes couches applicatives : tu utilises tes objets IHMs au niveau de tes DAOs
  je vois jTFSave_pass
qui est un TextField ,  tu devrais plutot utiliser un POJO User contant, login, pwd, ...
 car si tu modifie ton IHM ou mieuxréaliser un ihm web par exemple, tu pourras réutiliser le code "métier".

* ton IHM utilise directement la couche DAO (JDBC), tu devrais passer par un service.

pour ton problème technique
tu fais du executeUpdate
avec des requetes d'administration MySQL, je ne suis pas sur que ça passe, tu pourais essayer le executeQuery(), et autres méthodes execute*.
0
cs_thanatos67 Messages postés 51 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 13 novembre 2008
12 févr. 2007 à 17:11
Salut.

Pour ta première remarque, je suis parfaitement d'accord avec toi. En faite j'ai déjà écrit une seconde classe "Identification" qui fonctionne parfaitement, sauf que je n'arrive pas à l'implémenter correctement (j'ai déjà posté un message sur le forum depuis une semaine, sans réponse). Tout ça pour dire que c'est temporaire.

Pour le second point : ben euuuuu... en fait j'ai pas compris.
    DAO (dessin assisté par ordi? Si c'est ça je comprend encore moin, pourtant j'ai cherché sur le net. J'ai honte)
    POJO User contant (aucun idée de ce que c'est)

Troixieme point : je compte en faire un applet (si c'est bien ce dont tu parles).

Et j'ai testé executeUpdate la semaine dernière, sans succes, je vais tester "execute()" tout cour.
Sur le net j'ai trouvé tres peu d'aide pour le "drop user"...Décevant.
Je teste et je te tiens au courant.

au bout du clavier...
0
shaiulud Messages postés 404 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 15 juillet 2014 22
12 févr. 2007 à 17:32
DAO: Data Access Object => Objet spécialsé dans l'accès au données, JDBC dans ton cas.
POJO : Poor Old Java Object => Objet java ne servant qu'à stické des données nu Bean simple en somme.

Sinon tu conçois ton appli de la sorte
Les Objets qui transitent sur tes différentes couches de l'application

[----------------- Bean Java ------]         [ Table ]
[ IHM ]<->[ Service ] <-> [ DAO ]  <-> [SGBD]

tu auras au moins 2 Beans Java
 Utilisateur contenant au moins 2 attributs (nom, motDePasse).
  DonneMeteo avec par exemple (date, temperature, humidite, ..)

tu as un DAOUtilisateur qui à partir de la dbb t'instancie un objet Utilisateur
tu as un DAOMeteo qui à partir de la dbb t'instancie un/des objets DonneMeteo

Le service SvcUtilisateur appel le DAOUtilisateur
Le service SvcMeteo appel le DAOMeteo

l'IHM Metrologie te présente des tableaux/courbes, ... de DonneMeteo  après avoir appeler le SvcMeteo

Si tu fais un site web, ce sera ta servlet qui appellera le SvcMeteo, etc..
0
cs_thanatos67 Messages postés 51 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 13 novembre 2008
13 févr. 2007 à 14:06
Merci bien. Je comprend d'avantage le fonctionnement générale. Et je dois effectivement utiliser Tomcat pour la partie applet/servlet.

Pour ce qui est de la methode execute(), aucun changement... snif, je commence à me dire que ce ne doit pas être possible. J'espere que tu pourras me débloquer dans mon problème. En tout cas merci pour tes explications.

au bout du clavier...
0
Rejoignez-nous