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

Servlets/JSP Java Discussion :

Statement JSP JDBC


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Par défaut Statement JSP JDBC
    Bonjour à tous,

    Je voudrais savoir comment puis-je simplifier ce 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    String requete1, requete2, requete3, requete4, requete5, requete6, requete7, requete8, requete9, requete10, requete11, requete12, requete13, requete14, requete15, requete16, requete17, requete18, requete19, requete20, requete21, requete22, requete23;
     
    requete1 = "SELECT ... FROM ... Were ...";
    requete2 = "SELECT ... FROM ... Were ...";
    requete3 = "SELECT ... FROM ... Were ...";
    requete4 = "SELECT ... FROM ... Were ...";
    -
    -
    -
    -
    -
    -
    ....
     
    try {
                Statement stmt1  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt2  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt3  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt4  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt5  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt6  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt7  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt8  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt9  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt10  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt11  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt12  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt13  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt14  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt15  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt16  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt17  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt18  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt19  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt20  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt21  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt22  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                Statement stmt23  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
     
             Connection_Bdd.resultats1 = ((java.sql.Statement) stmt1).executeQuery(requete1);
                Connection_Bdd.resultats2 = ((java.sql.Statement) stmt2).executeQuery(requete2);
                Connection_Bdd.resultats3 = ((java.sql.Statement) stmt3).executeQuery(requete3);
                Connection_Bdd.resultats4 = ((java.sql.Statement) stmt4).executeQuery(requete4);
                Connection_Bdd.resultats5 = ((java.sql.Statement) stmt5).executeQuery(requete5);
                Connection_Bdd.resultats6 = ((java.sql.Statement) stmt6).executeQuery(requete6);
                Connection_Bdd.resultats7 = ((java.sql.Statement) stmt7).executeQuery(requete7);
                Connection_Bdd.resultats8 = ((java.sql.Statement) stmt8).executeQuery(requete8);
                Connection_Bdd.resultats9 = ((java.sql.Statement) stmt9).executeQuery(requete9);
                Connection_Bdd.resultats10 = ((java.sql.Statement) stmt10).executeQuery(requete10);
                Connection_Bdd.resultats11 = ((java.sql.Statement) stmt11).executeQuery(requete11);
                Connection_Bdd.resultats12 = ((java.sql.Statement) stmt12).executeQuery(requete12);
                Connection_Bdd.resultats13 = ((java.sql.Statement) stmt13).executeQuery(requete13);
                Connection_Bdd.resultats14 = ((java.sql.Statement) stmt14).executeQuery(requete14);
                Connection_Bdd.resultats15 = ((java.sql.Statement) stmt15).executeQuery(requete15);
                Connection_Bdd.resultats16 = ((java.sql.Statement) stmt16).executeQuery(requete16);
                Connection_Bdd.resultats17 = ((java.sql.Statement) stmt17).executeQuery(requete17);
                Connection_Bdd.resultats18 = ((java.sql.Statement) stmt18).executeQuery(requete18);
                Connection_Bdd.resultats19 = ((java.sql.Statement) stmt19).executeQuery(requete19);
                Connection_Bdd.resultats20 = ((java.sql.Statement) stmt20).executeQuery(requete20);
                Connection_Bdd.resultats21 = ((java.sql.Statement) stmt21).executeQuery(requete21);
                Connection_Bdd.resultats22 = ((java.sql.Statement) stmt22).executeQuery(requete22);
                Connection_Bdd.resultats23 = ((java.sql.Statement) stmt23).executeQuery(requete23);
     
                stmt1.close();stmt2.close();stmt3.close();stmt4.close();stmt5.close();stmt6.close();stmt7.close();stmt8.close();stmt9.close();stmt10.close();stmt11.close();stmt12.close();stmt13.close();stmt14.close();stmt15.close();stmt16.close();stmt17.close();stmt18.close();stmt19.close();stmt20.close();stmt21.close();stmt22.close();stmt23.close();
     
            } catch (SQLException e) {
                System.out.println("Anomalie lors de l'execution de la requête");
            }
    J'ai essayé de cette manière:

    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
    String tabReq[] = null ; 
     
    tabReq[1] = "SELECT ... FROM ... Were ...";
    tabReq[2] = "SELECT ... FROM ... Were ...";
    -
    -
    -
    ....
    tabReq[23] = "SELECT ... FROM ... Were ...";
     
    try {
     
     
                Statement stmt  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
     
    			ResultSet tabRes[] = null ;
     
    			for (int i =1 ; i <= 23 ; i++){
    			tabRes[i] = ((java.sql.Statement) stmt).executeQuery(tabReq[i]);
     
    			}
     
     
     
                stmt.close();
     
            } catch (SQLException e) {
                System.out.println("Anomalie lors de l'execution de la requête");
            }
    En faisant cette modification, quand je veux exécuter ma page jsp où j'appelle une méthode contenant ce code, j'ai une erreur "http 500, avec ce message. Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête" par contre sans la modification, ça fonctionne.
    Normalement, il n'est pas nécessaire de créer plusieurs Statement, mais si je n'en créer seulement 1 (partie sans modification), ça ne fonctionne pas non plus. Pouvez-vous m'aider svp ?

  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
    Le 500 c'est ce qu'il envoie au browser pour lui dire que ça marche pas. Le message d'erreur qui intéresse le développeur se trouve normalement dans les logs de ton tomcat.


    Pour ta simplification, il faut déjà te poser la question de savoir si tes requêtes sont tellement différente que tu ne peux pas faire une requête qui fait tout ou faire une requête paramétrée dont tu change les paramètres.

    On peux aussi itérer de manière un peu plus propre en évitant de hardcoder la taille du tableau de statement.
    Enfin, on peux aussi créer un tableau de string plus proprement. Ce qui donnerais ceci:


    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
    String[] tabRequetes = new String[] { 
      "SELECT ... FROM ... Were ...",
      "SELECT ... FROM ... Were ...",
      "SELECT ... FROM ... Were ...",
      "SELECT ... FROM ... Were ..." //....
    }
     
    try {
          int i =0;
          ResultSet[] rs = new ResultSet[tabRequetes.length];
          for (String requete : tabRequetes)
                Statement stmt  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                rs[i++]= ((java.sql.Statement) stmt1).executeQuery(requete);
                stmt.close();
            } catch (SQLException e) {
               e.printStackTrace(); // toujours afficher les erreur complète, nondidjou :)
            }

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Par défaut java jdbc
    Merci pour ta réponse ,

    Normalement pour afficher le résultat d'une requête, on utilise un, mais dans le cas ou on met des requêtes dans un tableau, et qu'on veut afficher le résultat de plusieurs requêtes, comment ça doit se faire ? Pour ton exemple, comment je pourrais les afficher ? La première fois, je faisais des while (pour mes 22 requêtes, 22 fois while une la suite des autres), pour afficher le résultat de chaque requête.

  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
    deux boucles imbriquée, une qui parcoure le tableau et, pour chaque élément du tableau, une qui parcoure les résultats de recherche.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 8
    Par défaut
    J'ai fais de cette manière, mais ça ne fonctionne pas .

    Dans ma classe requetes.java

    J'ai repris ton exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    try {
     
    			int i =0;
          Connection_Bdd.rs = new ResultSet[tabRequetes.length];
          Statement stmt  = (Statement) Connection_Bdd.cnx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
          for (String requete : tabRequetes)
     
                Connection_Bdd.rs[i++]= ((java.sql.Statement) stmt).executeQuery(requete);
                stmt.close();
            } catch (SQLException e) {
               e.printStackTrace(); 
            }
    Dans ma classe Connection_Bdd.java

    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
    public class Connection_Bdd {
     
        public static Connection cnx = null;
        public static ResultSet rs[];
        public static JspWriter out;
     
        public static void ConnectBDD() {
            try {
                Class.forName("com.ibm.as400.access.AS400JDBCDriver");
                System.out.println("Driver O.K.");
     
                String url = "jdbc:as400://192.168.1.6/OS400 V5R2";
                String user = "QSECOFR";
                String passwd = "TLS400";
                cnx = DriverManager.getConnection(url, user, passwd);
     
                System.out.println("Connecté");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    Dans ma classe affichage.java:

    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
    ResultSetMetaData rsmd = Connection_Bdd.rs[o].getMetaData();
    String tableauCaractere[] = {"N° bon SAV", "N° client", "Raison sociale", "N° contrat", "Origine appel", "Date appel", "Heure appel", "Motif1", "Motif2", "Motif3", "Motif4", "Date de rdv", "Heure de rdv", "Date début inter", "Heure début inter"};
                out.println("<div class=\"exampleTable\">");
     
    for (int i = 0; i < tableauCaractere.length; i++) {
                    out.print("<th>" + tableauCaractere[i] + "</th>\t");
                }
     
     for (int k = 1 ; k <= 22 ; k++){
                while (Connection_Bdd.rs[k].next()) {
                    out.println("<tr>");
     
                    for (int i = 1; i <= rsmd.getColumnCount(); i++) {
    					out.print("\t<td>" + Connection_Bdd.rs[k].getObject(i).toString() + "</td>\t ");
    				}

  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
    tu ne peux pas faire ton statement.close avant d'avoir parcouru les données.

    Pour le reste, il faudrait qu'on aie tes message d'erreur.


    Aussi, visiblement, tu travaille avec des champs statiques, dans une interface web, c'est une très très mauvaise idée. Revois ton code sans static.

Discussions similaires

  1. Servlet Jsp JDBC
    Par n.mouna dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 28/05/2010, 16h28
  2. [jsp & Jdbc] Erreur dans ma page lors d'un delete
    Par critok dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/06/2008, 16h08
  3. [jsp & Jdbc] Erreur dans ma page lors d'un delete
    Par critok dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 07/06/2006, 11h24
  4. [Tomcat] JSP & JDBC
    Par BRAUKRIS dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 18/10/2005, 20h50
  5. [JSP][JDBC]1 seule connexion à la DB(suite)
    Par betherb dans le forum JDBC
    Réponses: 6
    Dernier message: 14/08/2003, 10h02

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