Transtyper une fonction

Résolu
myers80 Messages postés 3 Date d'inscription mercredi 17 décembre 2003 Statut Membre Dernière intervention 30 juillet 2007 - 30 nov. 2004 à 10:36
ncottin Messages postés 17 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 4 février 2005 - 2 févr. 2005 à 17:16
Bonjour à tous les développeurs,

je débute en java.
je souhaite créer une méthode qui me retournera une valeur pouvant être de différents types (ResultSet ou int)
J'ai essayé comme type de retour Object, ... rien à faire le compilateur indique toujour une erreur (incompatible types, found : int)
Existe-t-il une solution ? Je vous remercie d'avance...

Je veux montre un bout de code dans le cas ou je ne m'exprimerai pas correctement ;-)

public ? SQLExec(Connection maconnection, String marequete)
{
try
{
// Create a result set containing all data from my_table
Statement stmt = maconnection.createStatement();
String TypeRequete = marequete.substring(1,6);
if (TypeRequete == "SELECT") {
ResultSet resultat = stmt.executeQuery(marequete);
return resultat;
}else if ((TypeRequete "UPDATE") || (TypeRequete "DELETE")) {
int nbenr = stmt.executeUpdate(marequete);
return nbenr;
}
else { System.out.println("Requete inconnue !"); }
}
catch (SQLException e){}
return null;
}

3 réponses

indiana_jules Messages postés 750 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 23 décembre 2008 22
30 nov. 2004 à 11:30
Slut
ben personnellement, je te conseille de faire une méthode différente selon chaque cas.

Sinon, tu peux utiliser effectivement la classe Object:
public Object SQLExec(Connection maconnection, String marequete)
{
try
{
// Create a result set containing all data from my_table
Statement stmt = maconnection.createStatement();
String TypeRequete = marequete.substring(1,6);
if (TypeRequete == "SELECT") {
ResultSet resultat = stmt.executeQuery(marequete);
return (Object)resultat;
}else if ((TypeRequete "UPDATE") || (TypeRequete "DELETE")) {
int nbenr = stmt.executeUpdate(marequete);
return "" + nbenr;
}
else { System.out.println("Requete inconnue !"); }
}
catch (SQLException e){}
return null;
} 


apres, tu peux déterminer le type de retour :
if(retour != null){
if(retour.getClass().getName() == "ResultSet"){
//Correspond au select
}
else{
//correspond à l'update ou au delete
}
}


Voilà

[Tout le monde a des idées : la preuve, c'est qu'il y en a de mauvaises]
3
myers80 Messages postés 3 Date d'inscription mercredi 17 décembre 2003 Statut Membre Dernière intervention 30 juillet 2007
30 nov. 2004 à 11:41
merci indiana_jules d'avoir répondu aussi rapidement.
je vais essayer ça tout de suite.
0
ncottin Messages postés 17 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 4 février 2005
2 févr. 2005 à 17:16
Oulà, ça m'a l'air compliqué ton source, là !

Si je repars du début :
"je souhaite créer une méthode qui me retournera une valeur pouvant être de différents types (ResultSet ou int)"

La surcharge de méthode n'est pas applicable ici, car elle n'est valab le que lorsque les paramètres diffèrent.

Tu peux renvoyer un "Object", mais c'est un peu crado. Je te donnes quand même comment le faire (***note : j'espère que mes balises "pre" seront interprétées...***). L'astuce est de passer par la classe "Integer" pour renvoyer un entier encapsulé dans un objet :

Object maMethode(boolean intReturn) {
if (intReturn) {
return new Integer(100);
}

ResultSet rs = new resultSet();
// Inititalisation de rs
// ...

return rs;
}

Pour savoir ce que t'a renvoyé l'appel de "maMethode" :

Object resultat = maMethode(...);
if (resultat instanceof Integer) {
int valeur = ((Integer)resultat).intValue();
}
else {
ResultSet rs = (ResultSet)resultat;
}

Voilou !

Pour finir, "int" est un type de données et non un objet ! C'est pour cela que tu trouveras des classes correspondant aux types de base (int -> Integer, boolean -> Boolean, etc.).

@+,

-- Nath

NB : "transtyper une fonction", à priori, ça ne veut pas dire grand chose...
0
Rejoignez-nous