Problème requête select qui ne renvoie que le premier résultat

titawine Messages postés 6 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 29 mars 2012 - 17 sept. 2010 à 13:27
seninana Messages postés 2 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 17 septembre 2010 - 17 sept. 2010 à 19:39
mon problème c'est que la boucle while(rs1.next()) s’exécute une seule fois, alors que le tableau rs1 contient plusieurs lignes.




<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page import="java.sql.*" %>
<%

Connection conn = null;
Statement state = null;
ResultSet rs = null;
String login1 = (String)session.getAttribute("login");
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url= "jdbc:sqlserver://localhost:1433;database=GestionCongePersonnel;user=user;password=user";
String user = "user";
String passwd = "user";

conn = DriverManager.getConnection(url, user, passwd);
state = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

String query = "SELECT Entite FROM employe where login='"+login1+"'";
rs = state.executeQuery(query);
String entite = "";
int id= 0;
String nomEmploye="";
String prenomEmploye="";
int exercice = 0;
String intermin = null;
String conge ="";
while(rs.next()){
entite= rs.getString("Entite");
}
String query1 = "SELECT * FROM employe INNER JOIN demande ON employe.Id_Employe=demande.Id_Employe where entite='"+entite+"'";
ResultSet rs1 = state.executeQuery(query1);
while(rs1.next()){
id = rs1.getInt("Id_Conge");

nomEmploye=rs1.getString("Nom_Employe");
prenomEmploye=rs1.getString("Prenom_Employe");

exercice=rs1.getInt("exercice");
intermin=rs1.getString("intermin");
String query2 = "SELECT typeAbsence FROM typeAbsence where idTypeAbsence='"+id+"'";
ResultSet rs2 = state.executeQuery(query2);
while(rs2.next()){
conge =rs2.getString("typeAbsence");
}
out.println(nomEmploye+" "+prenomEmploye+" "+conge+" "+exercice+" "+intermin);
}

} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}

%>
A voir également:

6 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 sept. 2010 à 14:45
Salut,

Quel est l'intérêt de mettre du code java dans une JSP ??? depuis le temps que je le répète : PAS DE CODE JAVA DANS UNE JSP : ca rend le code difficile à lire, moins optimisé, est source de bug, et empêche les tests unitaires !

Le code java se met dans une servlet, la JSP n'est là que pour formater la page HTML résultante, c'est tout ! On code pas en J2EE comme on code en php.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
titawine Messages postés 6 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 29 mars 2012
17 sept. 2010 à 15:25
oui je sais tu as raison c'était juste pour tester l'affichage. le principe problème là c'est pourquoi la boucle while(rs1.next()) ne revois que le premier résultat?
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 sept. 2010 à 16:42
Salut,

Tu n'as aucune erreur qui s'affiche par hasard ?

Quand je vois :
String query2 = "SELECT typeAbsence FROM typeAbsence where idTypeAbsence='"+id+"'";

Normalement, un id est de type entier, donc pas besoin d'apostrophes.

As tu essayé d'exécuter ta requête dans ton SGBD pour voir les résultats ?
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
titawine Messages postés 6 Date d'inscription mercredi 31 mars 2010 Statut Membre Dernière intervention 29 mars 2012
17 sept. 2010 à 16:55
non j'ai pas d'erreur mais c'est vrai pas besoin d'apostrophes.
j'ai déjà testé les requêtes et ça marche.
pour ce bout de code que j'ai écrit, et lorsque l’exécute j'botiens :
nomEmploye1 prenomEmploye1 congé administratif 2010 1

et si j’enlève :
String query2 = "SELECT typeAbsence FROM typeAbsence where idTypeAbsence='"+id+"'";
ResultSet rs2 = state.executeQuery(query2);
while(rs2.next()){
conge =rs2.getString("typeAbsence");
}

et j’exécute la page je vais avoir le résultat suivant :
nomEmploye1 prenomEmploye1 null 2010 1
nomEmploye2 prenomEmploye2 null 2010 20
nomEmploye3 prenomEmploye3 null 2010 34
.
..etc
0

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

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 sept. 2010 à 17:22
Salut,

Sûrement le problème des apostrophes : les apostrophes servent à délimiter des champs de type varchar, donc si c'est un type int, ca te renverra rien, et te déclenchera une exception. Sauf que tu es dans une jsp... donc les exceptions sont affichées... ou pas !

Tu le mettrais dans une servlet, au moins tu serais sûr que l'erreur est logguée.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
seninana Messages postés 2 Date d'inscription mardi 11 mai 2010 Statut Membre Dernière intervention 17 septembre 2010
17 sept. 2010 à 19:39
Salut
essai ceci




// declaration du tableau
JTable jTable1=new JTable(makeData(TaRequete),getColNames(TaRequete));

//methode de fabrique des données
public Object[][] makeData(String TaRequete) throws SQLException

{
stmt.execute(TaRequete);
ResultSet res=stmt.getResultSet();

ResultSetMetaData infos = null;
Object[][] data = null;
int colCount = 0;

try
{
infos = res.getMetaData();
colCount = infos.getColumnCount();
}
catch (SQLException E)
{
JOptionPane.showMessageDialog(null,E.toString(),"Connexion",JOptionPane.WARNING_MESSAGE);

}
int rowCount = this.recordCount(res);
int i,j = 0;

data = new Object[rowCount][colCount];

System.out.print(colCount);
System.out.print(rowCount);

stmt.execute(TaRequete);
ResultSet resul=stmt.getResultSet();

// Remplissage de data
while(resul.next())
{
for(i=0;i<colCount;i++)
data[j][i]=resul.getObject(i+1); // valeurs a retournées
j++;

}


return data;
}
0
Rejoignez-nous