XmlUtils class

Fermé
leilusha Messages postés 19 Date d'inscription mercredi 4 juin 2014 Statut Membre Dernière intervention 22 février 2017 - 7 nov. 2015 à 11:14
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 7 nov. 2015 à 13:14
Salut,

je crée une webMethod qui doit retourné une table de ma base de données, j'utilise la class XmlUtils pour cela, mais quand je test mon webService je reçoit des erreurs, je suis totalement novice en webServices et je ne sais ou esl le problème voilà mon code :
@WebMethod(operationName = "affT")
    public String affT(@WebParam(name = "nmT") String nmT) throws IOException {
        String html=null;
        try
        {
            Class.forName( "com.mysql.jdbc.Driver" );
            conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/TP1","root","");
            pst=conn.createStatement();
                rs=pst.executeQuery("select *  from '"+nmT+"'");
                html = net.proteanit.sql.XmlUtils.resultSetToHtml(rs);
        }
        catch(Exception e)
        {
            System.out.println(" Echec !");
            e.printStackTrace();
        }
        return html;
    }     
    }


quelqu'un pouvez m'aider svp ? Merci

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
7 nov. 2015 à 13:14
Bonjour,

Le code c'est bien, mais les erreurs que tu as c'est mieux.
La seule erreur "bloquante" que je vois c'est
"select *  from '"+nmT+"'"
, pourquoi est-ce que tu mets des apostrophes autour du nom de la table ?

De plus, tu as l'air de dire que c'est un problème de web service, mais ce code est relativement indépendant, c'est à dire que si tu l'utilises ailleurs que dans un web service il devrait se comporter de la même manière (donc planter même s'il n'est pas utilisé dans un web service).

J'ai également l'impression que tu réutilises sans arrêt les mêmes objets pour ta base de donnée (conn, pst, rs...) ce qui peut avoir des effets de bords.

Je t'invites à séparer ton code (Dao et Servvice dans des classes distinctes), pour ne pas tout mélanger, et à fermer tes Connection et Statement quand tu ne t'en sers plus, par exemple avec un try-with-resources.

Exemple (je n'ai pas testé) :

public class Service {
    @WebMethod(operationName = "affT")
    public String affT(@WebParam(name = "nmT") String nmT) throws IOException {
        return MysqlDao.getAllTable(nmT);
    }     
}

public class MysqlDao {

    static {
        // ne doit être appelé qu'une seule fois dans tout le programme
        Class.forName("com.mysql.jdbc.Driver"); 
    }

    private static Connection getConnection() {
        return DriverManager.getConnection("jdbc:mysql://localhost:3306/TP1","root","");
    }

    public static String getAllTable(String table) {
        try ( // try-with-resources
            Connection conn = getConnection();
            Statement stmt = conn.createStatement();
        ) {
            String query = "select * from "+nmT;
            ResultSet rs = stmt.executeQuery(query);
            return XmlUtils.resultSetToHtml(rs);
        }
        catch(Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
0