Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Erreur avec SELECT, resultset et getInt() [ Système / JDBC ] (gtsoul)

vendredi 15 septembre 2006 à 14:29:19 | Erreur avec SELECT, resultset et getInt()

gtsoul

Bonjour,
j'ai un problème que tout noob java rencontre un jour, la connection avec la base de données, plus particulierement avec le formatage des données du resultset. Pour rassurer le lecteur que vous êtes, Je vais tout de suite préciser que je n'ai pas de problèmes dans l'utilisation de requête ne nécessitant de resultset pour le stockage (INSERT, DELETE, UPDATE).
Par contre je coince pour effectuer une requete de type SELECT (avec récupération de données).

J'utilise Eclipse et jdk 1.5.
Voici la classe que j'utilise pour mes connections :
/*-----------------------------------------------------------------------------------------------*/
import java.sql.*;
import javax.swing.*;

public class DbManager
{
    private Connection         conn;
    private Statement            stmt;
    private PreparedStatement     pStmt;
    private ResultSet         rs;   
    private String             pilote = "org.gjt.mm.mysql.Driver"; //"org.gjt.mm.mysql.Driver"; "com.mysql.jdbc.Driver";
    private String             url = "jdbc:mysql://localhost/";

    // Méthode de connection à la base
    // Arguments : le nom de la base, le log, le pass
    public void connect(String dbName, String log, String pass)
    {
        try
        {
            url += dbName;
            Class.forName(pilote);
            conn = DriverManager.getConnection(url,log,pass);
            stmt = conn.createStatement();
        }
        catch ( SQLException E)
        {
            JOptionPane.showMessageDialog(null,"Erreur de connexion à la base. Veuillez contacter votre administrateur système","Connexion",JOptionPane.WARNING_MESSAGE);
            System.out.println("1");
        }
        catch ( ClassNotFoundException E)
        {
            E.printStackTrace();
        }
    }

    // Méthode qui renvoit un ResultSet pour une requête
    // @args -> la requete
    public ResultSet getQuery(String query)
    {
        try
        {
            rs = stmt.executeQuery(query);
        }
        catch (SQLException E)
        {
            JOptionPane.showMessageDialog(null,"Erreur de connexion à la base. Veuillez contacter votre administrateur système","Connexion",JOptionPane.WARNING_MESSAGE);
            System.out.println("2");
            System.out.println("SQLException: " + E.getMessage());
            System.out.println("SQLState: " + E.getSQLState());
            System.out.println("VendorError: " + E.getErrorCode());
        }
        return rs;
    }
}
/*-----------------------------------------------------------------------------------------------*/

et voici mon main() :
/*------------------------------------------------------------------------------------------------*/
        DbManager conn1 = new DbManager();
        ResultSet resultat;
        Integer age;
        conn1.connect("test","root","pass"); //connection
        String sql = "SELECT `age` FROM `test`.`plop` WHERE id=1";//on prépare la requete
        resultat = conn1.getQuery(sql);
        age = [u]resultat.getInt(1);[/u]
        System.out.println(age);
/*------------------------------------------------------------------------------------------------*/
La connection s'effectue correctement; si je remplace mon SELECT par un UPDATE, les champs sont mis à jour. Donc je pense que la liaison avec la bdd s'effectue correctement. J'ai testé ma requête avec SQLexplorer.
MAIS
dans le cas présent, Eclipse me souligne [u]resultat.getInt(1);[/u] et me renvoie une erreur explicite:
[b]Unhandled exception type SQLException[/b]

Je pense que l'erreur vient du main() ; pourriez-vous m'éclairer ?

Merci

vendredi 15 septembre 2006 à 15:14:59 | Re : Erreur avec SELECT, resultset et getInt()

kirua12

Salut,

normal que tu aies une erreur car ta requête renvoie une chaine de caractères, 'age' est compris comme le mot "age" et non la colonne.

Le problème vient des apostrophes, elles sont inutiles, essaie avec :

String sql = "SELECT age FROM test.plop WHERE id=1";//on prépare la requete


ça devrait aller mieux

vendredi 15 septembre 2006 à 15:34:18 | Re : Erreur avec SELECT, resultset et getInt()

gtsoul

Ce ne sont pas des apostrophes mais des accents graves, certes elles n'ont aucune utilité dans cet exemple, mais c'est une habitude que j'ai pris.
Le problème c'est que même sans il y a toujours le problème.

vendredi 15 septembre 2006 à 15:39:59 | Re : Erreur avec SELECT, resultset et getInt()

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Il faut que tu intercepte l'exception SQLException :

Try {
    age = resultat.getInt(1);
} catch (SQLException e) {}


vendredi 15 septembre 2006 à 15:50:35 | Re : Erreur avec SELECT, resultset et getInt()

gtsoul

J'ai fait ceci :
/*--------------------------------*/
        try {
            age = resultat.getInt(1);
        } catch (SQLException e) {
            System.out.println("SQLException: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("VendorError: " + e.getErrorCode());
        }
/*--------------------------------*/

et cela me retourne :
"SQLException: Before start of result set
SQLState: S1000
VendorError: 0"

vendredi 15 septembre 2006 à 16:25:03 | Re : Erreur avec SELECT, resultset et getInt()

gtsoul

Réponse acceptée !
Je viens de trouver.
Il faut positionner le resultset sur un élément (ou sur un autre) pour pouvoir utiliser une méthode getXXX, en utilisant par exemple la méthode first()

ainsi :
            if(resultat.first());
            {
                age = resultat.getInt(1);
                System.out.println(age);
            }

fonctionne.

merci de vos remarques

vendredi 15 septembre 2006 à 16:28:58 | Re : Erreur avec SELECT, resultset et getInt()

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Oui, ce qui est normal puisque si tu ne te positionne pas sur un élément, JDBC n'a aucun moyen de savoir quel enregistrement tu veux récupèrer.

A chaque récupération de données dans une base, il faut intercepter l'exception SQLException qui se déclenche par exemple si tu essaie d'accèder à un champ qui n'existe pas.





Cette discussion est classé dans : string, erreur, system, private, resultset


Répondre à ce message

Sujets en rapport avec ce message

insertion de données dans base de donnée à partir de servlet [ par Fridimette ] Bonjour,J'ai un problème qui est vraiment en trés de me casser la tête : je ne comprend pas pourquoi mes données ne sont pas ajoutées à la base lorsqu dema,de de petit aide en java [ par ruwaruwa ] voici ma petite question; je dois ecrire un programme qui permet de:*creer une formation avec 2 diplomes (Licence, Master) ou chaque diplome est formé Jtable avec JtextField [ par kawim ] Salut, J'ai un probleme pour afficher le contenu de mon text field dans un Jtable, si quelqu'un peut m'aider, voila mon code, et merci : import jav erreur no data found [ par fatimazahrazaidi ] salut, je veux inserer dans un tableau des valeur chargés a partir d"autre tableau mais tjr un erreur qui s affichetry </ Classer fichier .txt dans tableau java [ par Rasta rockeuse ] Bonjour à tous ! Comme indiqué, je me lance dans un programme sensé prendre les données présentes dans un fichier texte et les classer dans un tablea Informations sur les bases du serveur Mysql [ par garthos ] Bonjour,Je souhaite lister les BDD de mon serveur MySql et ensuite lister leur table (par la suite j'afficherai les infos de chaque table), le but fin java-probleme de saisie [ par steef04 ] salut j'ai un prob avec le prog qui suit ca ne donne pas la possibilite d'entrer le code,je ne peux continuer une aide please!!!!//ce programme fait l Adresse Mac via snmp (en local) [ par boumhid ] Bonjour tt le monde,j'ai pas su comment récupérer mon adresse mac via le protocole SNMP. Ci-dessous, un code que j'ai écrit qui m'a permit de récupére extraire des donnees d'un fichier xml pour les utiliser [ par ramzi ramzi ] Salut a tousJ'ai creer un parseur SAX qui extraire les donnee (element et leurs attributs) et les affiches dans la sortie standard(console)j'ai ajoute une banque en java [ par shadowcat1 ] bonjour a tousj'ai un probleme d'appel de methode. j'ai tout essayé mais ca ne marche pas.ca concerne la creation d'un compte pour une personne(soit m


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.