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

JDBC Java Discussion :

Nombre de lignes obtenues après une requete sql


Sujet :

JDBC Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 35
    Points
    35
    Par défaut Nombre de lignes obtenues après une requete sql
    Bonjour,

    J'ai écrit le code suivant qui me permet de me connecter à une base de donnée puis d'afficher les les éléments de la requete sql.
    Le soucis que j'ai c'est que j'ai mis une taille arbitraire dans mon tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String datas [][] = new String [150][ncols];
    car je ne sais pas comment faire pour récupérer le nombre de lignes.
    Est-ce que quelqu'un pourrait m'indiquer une méthode pour pouvoir connaitre le nombre de lignes qui ont été obtenues.

    Merci
    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
    69
    70
     
    import java.sql.*;
    import sun.jdbc.odbc.JdbcOdbcDriver;
     
    public class Table{
    	public static void main(String arg[]){
    		//Parametre de connexion a la base de données
    		String url="jdbc:odbc:MAGIC";
        String login = "root";
        String password = "root";
        Connection connection = null;
    		try{
    			Driver monDriver = new JdbcOdbcDriver();
          DriverManager.registerDriver(monDriver);
    			connection=DriverManager.getConnection(url,login,password);
     
    			Statement stmt=connection.createStatement();
    			ResultSet rs=stmt.executeQuery("SELECT Name AS Nom, COUNT([Seq.Open 
    By]) AS Ouvert FROM MAGIC._SMDBA_.Incident, MAGIC._SMDBA_._PERSONNEL_ 
    WHERE MAGIC._SMDBA_.Incident.[Seq.Open By] = 
    MAGIC._SMDBA_._PERSONNEL_.SEQUENCE GROUP BY Name");
    			creerTable(rs);
    			rs.close();
    			stmt.close();
    			connection.close();
    		}catch(SQLException e){
    			e.printStackTrace();
    		}finally{
    			try{
    				connection.close();
    			}catch(SQLException e){
    				e.printStackTrace();
    			}
    		}
    	}
     
    	public static void creerTable(ResultSet rs) throws SQLException{
    	int i;
    		ResultSetMetaData rsmd = rs.getMetaData();
    		int ncols = rsmd.getColumnCount();
    		String [] noms = new String[ncols];
     
    		for(i=1; i<=ncols; i++){
    			noms[i-1] = rsmd.getColumnLabel(i); 
    		}
     
    		String datas [][] = new String [150][ncols];
     
    		boolean suivant = rs.next();
    		int k=0;
    		while(suivant){
    			for(i=1; i<=ncols; i++){
    				datas[k][i-1] = rs.getString(i);
    			}
    			suivant = rs.next();
    			k++;
    		}
     
    		for(int j=0; j<noms.length; j++){
    			System.out.println(noms[j]);	
    		}
    		System.out.println(datas.length);
    		System.out.println(datas[0].length);
     
    	for(int l=0;l<datas.length; l++)
    			for(int m=0;m<datas[0].length; m++){
    			System.out.println(datas[l][m] + " ");
    		}
    	}
    }

  2. #2
    Membre à l'essai Avatar de mathieumadrid
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 39
    Points : 23
    Points
    23
    Par défaut
    Salut,

    Tu devrais utiliser une LinkedList ou un ArrayList (ou au pire un Vector) pour ranger tes éléments si tu veux garder la méthode next() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    LinkedList liste = new LinkedList();
    String elem;
     
    while(rs.next())
    	for(i = 0; i < ncols; ++i)
    	{
    		elem = rs.getString(i);
    		liste.add(elem);
    	}

  3. #3
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Salut,

    Personnelement, j'utilise le code qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    resultSet.lastRow();
    int nbreLignes=resultSet.getRow();
    //ne pas oublier de remettre le curseur à sa position initiale
    resultSet.beforeFirst();
    Mais il y a peut-être une meilleure façon de faire...

    @+

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 35
    Points
    35
    Par défaut
    la méthode lastRow() n'existe pas(ou plus) c'est last()
    J'ai écrit le bout de code que tu as indiqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rs.last();
    int nbreLignes=rs.getRow();
    //ne pas oublier de remettre le curseur à sa position initiale
    rs.beforeFirst();
    et j'obtiens cette exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    java.sql.SQLException: Result set type is TYPE_FORWARD_ONLY
    at sun.jdbc.odbc.JdbcOdbcResultSet.last(Unknown Source)
    at Table.creerTable(Table.java:46)
    at Table.main(Table.java:21)

  5. #5
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    Comme l'exception te le dit, ton ResultSet est en FORWARD_ONLY, donc pas de last() et de beforeFirst() possibles (la Javadoc est très explicite). Si tu veux utiliser ces fonctionnalités, à la construction de ton ResultSet il faut que tu changes le "resultSetType".

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Pensez à jeter un coup d'oeil dans la FAQ : Comment connaître le nombre de lignes/colonnes d'un ResultSet ?

    a++

  7. #7
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    Citation Envoyé par maxlegrand
    la méthode lastRow() n'existe pas(ou plus) c'est last()
    J'ai écrit le bout de code que tu as indiqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rs.last();
    int nbreLignes=rs.getRow();
    //ne pas oublier de remettre le curseur à sa position initiale
    rs.beforeFirst();
    et j'obtiens cette exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    java.sql.SQLException: Result set type is TYPE_FORWARD_ONLY
    at sun.jdbc.odbc.JdbcOdbcResultSet.last(Unknown Source)
    at Table.creerTable(Table.java:46)
    at Table.main(Table.java:21)
    Si le ResultSet est de type TYPE_FORWARD_ONLY, la seule possibilité est que tu utilises une autre requête faisant un COUNT.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par abertaud
    Si le ResultSet est de type TYPE_FORWARD_ONLY, la seule possibilité est que tu utilises une autre requête faisant un COUNT.
    J'ai modifié Statement comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Statement stmt = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
    et ça fonctionne maintenant sans donner d'exceptions ou d'erreurs.
    Pour ce qui est de la solution que tu proposes, comment ça se passe ?

  9. #9
    Membre éclairé Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Points : 861
    Points
    861
    Par défaut
    Ce qu'il te propose est de faire non pas une mais deux requêtes : une pour faire le COUNT, l'autre c'est la requête elle-même (pourtant ça me paraît clair ).

Discussions similaires

  1. [AC-2000] compter le nombre d'enregistrements selectionner dans une requete sql
    Par charlou74 dans le forum VBA Access
    Réponses: 20
    Dernier message: 04/02/2010, 17h50
  2. Réponses: 7
    Dernier message: 19/06/2008, 08h17
  3. Nombre de ligne que retourne une requete
    Par newmar dans le forum JDBC
    Réponses: 4
    Dernier message: 22/05/2008, 01h28
  4. Réponses: 3
    Dernier message: 20/11/2006, 12h17
  5. y'a t il un moyen de récupérer la ligne N d'une requete sql?
    Par c_moi_c_moi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/11/2005, 10h47

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