gtsoul
Messages postés5Date d'inscriptionsamedi 31 décembre 2005StatutMembreDernière intervention15 septembre 2006
-
15 sept. 2006 à 14:29
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013
-
15 sept. 2006 à 16:28
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.*;
// 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 = resultat.getInt(1); 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 resultat.getInt(1); et me renvoie une erreur explicite:
Unhandled exception type SQLException
Je pense que l'erreur vient du main() ; pourriez-vous m'éclairer ?
Merci
A voir également:
Before start of result set
Java.sql.sqlexception before start of result set - Meilleures réponses
gtsoul
Messages postés5Date d'inscriptionsamedi 31 décembre 2005StatutMembreDernière intervention15 septembre 2006 15 sept. 2006 à 16:25
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);
}
gtsoul
Messages postés5Date d'inscriptionsamedi 31 décembre 2005StatutMembreDernière intervention15 septembre 2006 15 sept. 2006 à 15:34
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.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 15 sept. 2006 à 16:28
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.