Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/12/2011, 19h37   #1
Membre actif
 
Inscription : avril 2002
Messages : 460
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 460
Points : 180
Points : 180
Par défaut Requête SQL en Java sous Netbeans

Bonjour à tous,

J'utilise une requête SQL en java sous Netbeans pour me permettre d"extraire le dernier Numéro d'Enregistrement qui se trouve dans un champs d'une base de données.

J'ai bien vu qu'il existe le mot clef "MAX" mais dans mes lignes de codes se produit une erreur.
Le code suivant mentionne une requête SQL qui fonctionne..mais ce qui me gêne un peu , c'est la boucle while qui est obligée de parcourir la base de données ( bien qu'elle ne soit pas importante en données ).

Code Java :
1
2
3
4
5
6
7
8
try {
 
          resultat =  instruction.executeQuery("SELECT NUMENR FROM APP.TABLETEST");
 
             while(resultat.next())
               JOptionPane.showMessageDialog(null,"Résultat"+resultat.getString("NUMENR"));
         stockageEnr = resultat.getString("NUMENR");
                jTFNumEnr.setText(stockageEnr);

J'ai essayé avec la requête :
Code Java :
resultat =  instruction.executeQuery("SELECT MAX(NUMENR) FROM APP.TABLETEST WHERE NUMENR IS NOT NULL");

Mais j'ai le message d'erreur :
Citation:
java.sql.SQLException: La colonne 'NUMENR' est introuvable.
at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
"

Y a t'il possibilité d'avoir une requête SQL sans devoir parcourir avec la boucle "while" tous les enregistrement et me permettant d'obenir la dernière valeur enregistrée dans le champs "NUMENR" ?

Merci par avance..
a+
Telemak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 23h30   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Commencez par apprendre la SQL !!! parce que vu le genre de traitement que vous faite je ne donne pas cher de votre peau lors de la montée en charge... Je suppose que c'est pour calculer une nouvelle clef ???

mais revenons à SQL. Dans votre requête :
Code :
1
2
3
SELECT MAX(NUMENR) 
FROM APP.TABLETEST 
WHERE NUMENR IS NOT NULL
Quel est le nom de la seule colonne que cette requête retourne ?
Zébulon ? Abracadabra ?? ou NUMENR ???
Aucun puisque vous ne lui donnez aucun nom !

SQL est, comme tout langage, doté d'une syntaxe. Si vous ne la respectez pas, pourquoi voudriez vous que lui vous respecte ?

Commencez donc par apprendre ce langage et an particulier lisez ceci : http://sqlpro.developpez.com/cours/sqlaz/select/#L1.3

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 12h00   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 333
Points : 18 333
Envoyer un message via MSN à CinePhil
Effectivement, pour récupérer le résultat de la requête, il faut donner un nom à la colonne de résultat de l'opération MAX(NUMENR).

Cependant, le message d'erreur semble dire que la colonne NUMENR n'existe pas dans la table interrogée. Vérifiez donc la structure de la table.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 14h39   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Le message d'erreur est un message Java, et je dirai qu'il provient de ces appels :
Code Java :
resultat.getString("NUMENR")
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 21h37   #5
Membre actif
 
Inscription : avril 2002
Messages : 460
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 460
Points : 180
Points : 180
Je n'ai pas besoin d'une "montée en charge"', ni de devoir apprendre le SQL à fonds..
Bien je ne conteste pas le fait que j'ai tort, et que trouve le langage intéressant ..mais là n'est pas mon but..
Je ne programme que de temps en temps par loisir et cela sans intérêts quelconques..(m'enfin si on peut appeler cela de la programmation.. )
Dans mon programme je n'aurais en principe besoin que de deux ou trois requêtes..

J'ai parcouru le forum java-jdbc, celui de sql..en recherche sous quelques mots-clefs..et je suis notament tombé sur "MAX" et "DESC" entre autres
J'ai également pioché dans deux anciens livres consacré à SQL que j'ai conservé par chance datant de 2001..mais je n'ai pas vraiment trouvé de réponse à ce que je me pose comme question... M'y suis je mal pris...

Mon premier code de programme fonctionne. ( extrait d'une portion de mon code que j'avais mentionné plus bas...
Code :
1
2
3
          resultat =  instruction.executeQuery("SELECT NUMENR FROM APP.TABLETEST");
 
             while(resultat.next())
Comme cité..
Citation:
mais ce qui me gêne un peu , c'est la boucle while
Je me posais la question s'il y avait une autre manière de récupérer la dernière valeur enregistrée dans le champs "NUMENR" en une seule ligne SQL sans devoir passer par cette boucle, j'allais dire une manière un peu plus élégante.

Le champs "NUMENR" existe bien dans ma table.
Elle enregistre comme données :


Citation:
1
2
3
4 <-- dernière valeur saisie, que je souhaites récupérer à l'aide d'une seule ligne SQL et non qu'il y ait un parcours des données de la première à la dernière ligne
Donc dans la syntaxe du style : " SELECT NUMENR FROM APP.TABLEPRETSINFINE WHERE NUMENR = "DERNIER"; ( J'ai mis "DERNIER" pour compréhension..mais s'il y a un autre mot clef. qui puisse exister ...)
Puis de récupérer le résultat par un "resultat.getString("NUMENR")" par exemple.

Comme déjà cité..j'ai peut être mal cherché ou j'interprète peut être mal.dans ma logique..d'où votre avis ..

En tous les cas merci pour vos réponses...

A+
Telemak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 22h39   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 333
Points : 18 333
Envoyer un message via MSN à CinePhil
On t'a dit que ce qu'il manque à ta requête, c'est de baptiser la colonne résultat du MAX :
Code :
1
2
3
SELECT MAX(NUMENR) AS NUMENR_MAX
FROM APP.TABLETEST 
WHERE NUMENR IS NOT NULL
Ensuite tu récupères la colonne NUMENR_MAX avec ton programme.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h21.


 
 
 
 
Partenaires

Hébergement Web