IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

Problème de connexion à la base de données


Sujet :

Développement Web en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 126
    Par défaut Problème de connexion à la base de données
    Bonjour,

    J'ai une JSP sur laquelle se trouve un champ de saisie d'un numéro ISBN et un bouton "Search book" qui permet de chercher le livre correspondant, dans ma base de données MySQL. Je dois afficher le résultat sous la forme d'une table en gros.

    Jusqu'ici j'ai pu implémenter le web service ainsi que le client, néanmoins quand je rentre un numéro ISBN valide, je n'arrive pas à afficher le livre. Du coup j'ai fait "tester le web service". Il contient deux méthodes, celle qui se connecte à la base et celle qui retourne le livre. J'ai commencé par tester la connexion et j'ai le message d'erreur suivant :

    WS00041: Service invocation threw an exception with message : null;
    Pourtant j'ai testé la connexion à ma base de données sous NetBeans et ça a marché. La seule explication que j'ai c'est que ma base de données n'est pas associée à mon web service, ce qui expliquerait pourquoi je peux m'y connecter sous NetBeans mais pas lorsque j'appelle le web service.

    Quelqu'un sait-il comment faire en sorte que mon WS se connecte à cette base de données-ci en particulier ?

    Si vous avez besoin d'une partie du code ou autre info n'hésitez pas.

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Il faudrait déjà avoir un message d'erreur plus détaillé et surtout le code derrière. Je suis en rade de boules de cristal.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 126
    Par défaut
    Salut et merci de ta réponse. Concernant l'erreur je n'ai que ça.
    Voici une partie de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    @WebService(serviceName = "WebServiceBook")
    public class WebServiceBook {
     
        Connection conn;
        Statement statement;
        ResultSet res;
     
        public void connect() {
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");
                String url = "jdbc:oracle:thin:@//127.0.0.1:1521/xe";
                try {
                    conn = DriverManager.getConnection(url, "root", "root");
                } catch (SQLException ex) {
                    Logger.getLogger(WebServiceBook.class.getName()).log(Level.SEVERE, null, ex);
                }
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(WebServiceBook.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        /**
         * This is a sample web service operation
         */
        @WebMethod(operationName = "SearchBook")
        public  List book(@WebParam(name = "isbn") String isbn) {
            List book = new ArrayList(0);
            try {
                connect();
                statement = conn.createStatement();
                res = statement.executeQuery("select * from book where isbn ='"+isbn+"'");
                while(res.next())
                    book.add(res.getString(1)+" / "+res.getString(2)+" / "+res.getString(3)+" / "+res.getString(4)+" / "+res.getString(5));
            } catch(SQLException ex) {
                Logger.getLogger(WebServiceBook.class.getName()).log(Level.SEVERE, null, ex);
            }
     
            return book;
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Result Page</title>
        </head>
        <body>
            <center>    
                <% if(request.getParameter("isbn").equals("")) { %>
                    <br><br>
                        Book : none
                <% } else { %>
                    <br><br>
                        Book whose isbn number is <%= request.getParameter("isbn") %> 
                <% } %>
                <%
                try {
                    pack.WebServiceBook_Service service = new pack.WebServiceBook_Service();
                    pack.WebServiceBook port = service.getWebServiceBookPort();
                     // TODO initialize WS operation arguments here
                    java.lang.String isbn = "";
                    // TODO process result here
                    java.util.List<java.lang.String> result = port.searchBook(isbn);
                    %>
                    <table width="300px" border="1">
                        <tr><td>Id</td><td>title</td><td>isbn</td><td>author</td><td>abstract</td></tr>
                    <%
                        for(int i=0; i<result.size();i++) {
                            String[] c = result.get(i).toString().split(" / ");
                            out.println("<tr><td>"+c[0]+"</td><td>"+c[1]+"</td><td>"+c[2]+"</td><td>"+c[3]+"</td><td>"+c[4]+"</td></tr>");
                        }
                    %>
                    </table>
                    <%
                } catch (Exception ex) {
                    out.println("Sorry we were not able to connect to the database");// TODO handle custom exceptions here
                }
                %>
            </center>
        </body>
    </html>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <html>
        <head>
            <title></title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <script>
                function fctSearch()
                {
                    var xhr=null;
                    if(window.XMLHttpRequest) //firefox and others
                        xhr = new XMLHttpRequest();
                    else if (window.ActiveXObject) //IE
                        {
                            try
                                { xhr = new ActiveXObject("Msxml12.XMLHTTP"); }
                            catch (e)
                                { xhr = new ActiveXObject("Microsoft.XMLHTTP"); }
                        }
                    xhr.onreadystatechange = function() {
                        if (xhr.readyState===4)
                            document.getElementById('books').innerHTML = xhr.responseText;
                        };
                    xhr.open("GET", "books.jsp?isbn="+isbn.value, true);
                    xhr.send(null);
                }
              </script>
        </head>
        <body style="padding-top: 150px">
            <center>    
                Isbn : 
                    <input type="text" value="" name="isbn"/>
                    <input type="button" name="btn" value="Search book" onclick="fctSearch();" />
                    <div id="books"> </div>
            </center>
        </body>
    </html>
    PS : pardon j'ai oublié. Il me dit aussi "Java DB location not set properly" mais je ne comprends pas pourquoi parce que ce n'est pas à celle-ci que je suis connecté mais à celle-là.

    Nom : soap.png
Affichages : 277
Taille : 145,4 Ko

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Commence déjà par mettre des try / catch exception dans tes méthodes du webservice pour avoir ces exceptions et les afficher. Ca évitera de chercher à l'aveugle dans ton code ce qui est null. Affiche la stacktrace complète de l'exception et poste là ici.

    Aussi, tu devrais être plus rigoureux dans ton code. Ton connect() ne renvoie rien, du coup si la connexion échoue, tu ignore ça complètement et tu continue aveuglément d'essayer de travailler avec une connexion qui n'existe pas. Ensuite, tu ne libère aucune de tes ressources. Pas de close sur la connexion, ni le statemen ni le resultset.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 126
    Par défaut
    Ne le prends pas mal mais je ne comprends pas tout ce que tu attends de moi. J'ai le sentiment d'avoir déjà des try catch dans mes fonctions connect et book. Par ailleurs j'ai vu dans la documentation java que ResultSet se fermait tout seul mais j'ai fait comme tu m'as dit et je l'ai fermé à la main. Je suis daccord avec toi concernant le retour de connect mais alors je renvoie quoi ? un boolean ?

    Voici ce à quoi j'ai droit quand je fais "tester le web service"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Exceptions details : java.lang.NullPointerException
     
    javax.servlet.ServletException: java.lang.NullPointerException at org.glassfish.webservices.monitoring.WebServiceTesterServlet.doPost(WebServiceTesterServlet.java:336) at org.glassfish.webservices.monitoring.WebServiceTesterServlet.invoke(WebServiceTesterServlet.java:106) at org.glassfish.webservices.JAXWSServlet.doPost(JAXWSServlet.java:157) at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) at java.lang.Thread.run(Thread.java:722) Caused by: java.lang.NullPointerException at org.glassfish.webservices.monitoring.WebServiceTesterServlet.doPost(WebServiceTesterServlet.java:307) ... 31 more

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par ImmoTPA Voir le message
    Ne le prends pas mal mais je ne comprends pas tout ce que tu attends de moi. J'ai le sentiment d'avoir déjà des try catch dans mes fonctions connect et book.
    Aucune qui corresponde à l'exception que tu récupère.

    Un truc de ce style là serait utile pour debugger:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    @WebMethod(operationName = "SearchBook")
        public  List book(@WebParam(name = "isbn") String isbn) {
            try{
            List book = new ArrayList(0);
            try {
                connect();
                statement = conn.createStatement();
                res = statement.executeQuery("select * from book where isbn ='"+isbn+"'");
                while(res.next())
                    book.add(res.getString(1)+" / "+res.getString(2)+" / "+res.getString(3)+" / "+res.getString(4)+" / "+res.getString(5));
            } catch(SQLException ex) {
                Logger.getLogger(WebServiceBook.class.getName()).log(Level.SEVERE, null, ex);
            }
     
            return book;
            } catch (Exception e){
               e.printStackTrace();
               throw new RuntimeException(e);
            }
        }
    Citation Envoyé par ImmoTPA Voir le message
    Par ailleurs j'ai vu dans la documentation java que ResultSet se fermait tout seul
    Quand tu fermes le Statement qui lui corresponds, oui, mais tu ne le fais pas.
    Citation Envoyé par ImmoTPA Voir le message
    mais j'ai fait comme tu m'as dit et je l'ai fermé à la main. Je suis daccord avec toi concernant le retour de connect mais alors je renvoie quoi ? un boolean ?
    Vu que sans connexion tu ne peux rien faire, je lancerais une exception à cet endroit-là.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de connexion à une base de données
    Par dali_dragon dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/11/2006, 19h25
  2. Réponses: 3
    Dernier message: 12/10/2006, 18h59
  3. [C#]Problème de connexion à la base de données
    Par hebus. dans le forum ASP.NET
    Réponses: 3
    Dernier message: 08/06/2006, 11h34
  4. [C#] Problème de connexions à la base de donnée pour 1 champ
    Par padodanle51 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 17/05/2006, 13h43
  5. [ODBC] [DB2] Problème de connexion à une base de données sur un as400 via PHP sous Linux
    Par boo64 dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 19/04/2006, 09h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo