ResultSet et Size

Le
Alfsalim
Bonjour

y'a il un moyen de savoir le nombre de résultats d'une requête SQL avec
l'objet ResultSet ?, pour l'instant je suis obliger de faure une autre
requete avec un count(*), ou je fait parcourir mon resultSet jusqu'a la fin
puis je compte le nombre de résultats.
Merci
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Bernard Koninckx
Le #620018
C'est possible avec ceratins driver JDBC mais je ne sais pas lesquels.
Il me semble avoir vu un post sur ce sujet il y a un petit moment.

Si c'est pour remplir un tableau autant utiliser un Vector, une List ou un
Set, tu n'as pas besoin de connaître le nombre exact de tuples dans ton
recordset.

En espérant t'avoir éclairé un petit peu.

Bernard

"Alfsalim" 40715e62$0$16298$

Bonjour

y'a il un moyen de savoir le nombre de résultats d'une requête SQL avec
l'objet ResultSet ?, pour l'instant je suis obliger de faure une autre
requete avec un count(*), ou je fait parcourir mon resultSet jusqu'a la
fin

puis je compte le nombre de résultats.
Merci




yvon.thoravalNO-SPAM
Le #619535
Alfsalim
y'a il un moyen de savoir le nombre de résultats d'une requête SQL avec
l'objet ResultSet ?


voui :

int n = executeUpdate(createTableCafe);
n donnera le nb d'update , cf :

http://jguillard.developpez.com/JDBC/8.html

attention ce tuto a des erreurs concernant les noms de colonnes...
--
yt

Laurent Nel
Le #619532
Bonjour,

int n = executeUpdate(createTableCafe);
n donnera le nb d'update , cf :


executeUpdate ne s'applique pas à une requète SELECT, mais uniquement à une
requête qui retourne un entier (INSERT, UPDATE, DELETE).

Les deux moyens indépendants de la base pour connaître la taille d'un
ResultSet:
- stocker des données dans une structure dynamique au cours de l'itération
sur le ResultSet et obtenir la taille de la structure à la fin
- faire une requête select count(*) généralement pas trop mal optimisée par
la base

Laurent
--
Laurent NEL, Gérant

www.leuville.com / Conseil - Ingénierie - Formation
Java - J2EE - UML

Offres d'emploi: http://www.leuville.com/entry_servlet?screenÊrrieres

Thierry
Le #622942
Salut,
Tu peux essayer ceci.
Statement stm = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stm.executeQuery("SELECT * FROM table");
rs.last();
count = rs.getRow();
rs.beforeFirst();

Thierry RICARD

Thierry RICARD (Création de sites, développement spécifiques... n'hésitez
pas à me contacter)Quelques sites de ma création
:http://perso.wanadoo.fr/katyrd <== Gerez les articles de vos revues
facilement avec REVUES.http://www.efrance.fr/tr <== Un site dynamique sur
internet (En ASP) serveur en panne !http://sarl.grange.free.fr/ <== La
domotique... Enfin à la portée de toushttp://perso.wanadoo.fr/paula/ <== Les
créations de Paula



"Alfsalim" 40715e62$0$16298$

Bonjour

y'a il un moyen de savoir le nombre de résultats d'une requête SQL avec
l'objet ResultSet ?, pour l'instant je suis obliger de faure une autre
requete avec un count(*), ou je fait parcourir mon resultSet jusqu'a la
fin

puis je compte le nombre de résultats.
Merci




Valère viandier
Le #622938
Sujet rarement débattus, l'utilité de connaitre le nombre d'enregistrements
d'une requete SQL.
Celà peu imposer à la base de rapatrier toutes les pages de données et
d'alourdir le trafic reseau, la charge de la base de donné et la VM cliente.

Le "SELECT COUNT(*)" est loin d'être la pire des solutions et a l'avantage
d'être portable d'une base à l'autre et surtout, très optimisée par les
bases de données depuis bien longtemps déjà ( accès aux informations de
statistiques et non comptage des lignes ).

"Thierry" news:c4up6f$crc$
Salut,
Tu peux essayer ceci.
Statement stm = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stm.executeQuery("SELECT * FROM table");
rs.last();
count = rs.getRow();
rs.beforeFirst();

Thierry RICARD

Thierry RICARD (Création de sites, développement spécifiques... n'hésitez
pas à me contacter)Quelques sites de ma création
:http://perso.wanadoo.fr/katyrd <== Gerez les articles de vos revues
facilement avec REVUES.http://www.efrance.fr/tr <== Un site dynamique sur
internet (En ASP) serveur en panne !http://sarl.grange.free.fr/ <== La
domotique... Enfin à la portée de toushttp://perso.wanadoo.fr/paula/ <= Les
créations de Paula



"Alfsalim" 40715e62$0$16298$

Bonjour

y'a il un moyen de savoir le nombre de résultats d'une requête SQL avec
l'objet ResultSet ?, pour l'instant je suis obliger de faure une autre
requete avec un count(*), ou je fait parcourir mon resultSet jusqu'a la
fin

puis je compte le nombre de résultats.
Merci








jerome moliere
Le #622677
Valère viandier wrote:
Sujet rarement débattus, l'utilité de connaitre le nombre d'enregistrements
d'une requete SQL.
Celà peu imposer à la base de rapatrier toutes les pages de données et
d'alourdir le trafic reseau, la charge de la base de donné et la VM cliente.

Le "SELECT COUNT(*)" est loin d'être la pire des solutions et a l'avantage
d'être portable d'une base à l'autre et surtout, très optimisée par les
bases de données depuis bien longtemps déjà ( accès aux informations de
statistiques et non comptage des lignes ).


je suis plutot d'accord avec valere même s'il quote comeml un goret :)
j'ajouterai qu'en effet il n'y a pas pour l'instan tde moyen standardisé
par JDBC pour connaitre cette information (est elle neecssaire ?).
certains drivers peuvent te la fournir dans certaines circonstances
comme le prouve cette interface extraite du code source de mysql
(connector/J)

package com.mysql.jdbc;

import java.sql.SQLException;


/**
* This interface abstracts away how row data is accessed by
* the result set. It is meant to allow a static implementation
* (Current version), and a streaming one.
*
* @author dgan
*/
public interface RowData {
/**
* What's returned for the size of a result set
* when its size can not be determined.
*/
public static final int RESULT_SET_SIZE_UNKNOWN = -1;

/**
* Returns true if we got the last element.
*
* @return true if after last row
* @throws SQLException if a database error occurs
*/
boolean isAfterLast() throws SQLException;

/**
* Only works on non dynamic result sets.
*
* @param index row number to get at
* @return row data at index
* @throws SQLException if a database error occurs
*/
byte[][] getAt(int index) throws SQLException;

/**
* Returns if iteration has not occured yet.
*
* @return true if before first row
* @throws SQLException if a database error occurs
*/
boolean isBeforeFirst() throws SQLException;

/**
* Moves the current position in the result set to
* the given row number.
*
* @param rowNumber row to move to
* @throws SQLException if a database error occurs
*/
void setCurrentRow(int rowNumber) throws SQLException;

/**
* Returns the current position in the result set as
* a row number.
*
* @return the current row number
* @throws SQLException if a database error occurs
*/
int getCurrentRowNumber() throws SQLException;

/**
* Returns true if the result set is dynamic.
*
* This means that move back and move forward won't work
* because we do not hold on to the records.
*
* @return true if this result set is streaming from the server
* @throws SQLException if a database error occurs
*/
boolean isDynamic() throws SQLException;

/**
* Has no records.
*
* @return true if no records
* @throws SQLException if a database error occurs
*/
boolean isEmpty() throws SQLException;

/**
* Are we on the first row of the result set?
*
* @return true if on first row
* @throws SQLException if a database error occurs
*/
boolean isFirst() throws SQLException;

/**
* Are we on the last row of the result set?
*
* @return true if on last row
* @throws SQLException if a database error occurs
*/
boolean isLast() throws SQLException;

/**
* Adds a row to this row data.
*
* @param row the row to add
* @throws SQLException if a database error occurs
*/
void addRow(byte[][] row) throws SQLException;

/**
* Moves to after last.
*
* @throws SQLException if a database error occurs
*/
void afterLast() throws SQLException;

/**
* Moves to before first.
*
* @throws SQLException if a database error occurs
*/
void beforeFirst() throws SQLException;

/**
* Moves to before last so next el is the last el.
*
* @throws SQLException if a database error occurs
*/
void beforeLast() throws SQLException;

/**
* We're done.
*
* @throws SQLException if a database error occurs
*/
void close() throws SQLException;

/**
* Returns true if another row exsists.
*
* @return true if more rows
* @throws SQLException if a database error occurs
*/
boolean hasNext() throws SQLException;

/**
* Moves the current position relative 'rows' from
* the current position.
*
* @param rows the relative number of rows to move
* @throws SQLException if a database error occurs
*/
void moveRowRelative(int rows) throws SQLException;

/**
* Returns the next row.
*
* @return the next row value
* @throws SQLException if a database error occurs
*/
byte[][] next() throws SQLException;

/**
* Removes the row at the given index.
*
* @param index the row to move to
* @throws SQLException if a database error occurs
*/
void removeRow(int index) throws SQLException;

/**
* Only works on non dynamic result sets.
*
* @return the size of this row data
* @throws SQLException if a database error occurs
*/
int size() throws SQLException;

/**
* Set the result set that 'owns' this RowData
*
* @param rs the result set that 'owns' this RowData
*/
void setOwner(ResultSet rs);

/**
* Returns the result set that 'owns' this RowData
*
* @return the result set that 'owns' this RowData
*/
ResultSet getOwner();

}

avec une methode size() qui marche dans le cas de ResultSet non
dynamiques...

Jerome


--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—82212111941

Publicité
Poster une réponse
Anonyme