Problème avec la déclaration de retour
Question
J'ai un problème avec la déclaration de retour >. < Je veux stocker tous les noms de magazines dans
ArrayList<String> ListNameMagazine = new ArrayList<String>();
j'ai un DB; dans la base de données, il y a une table name_magazine
et les données dans <=> sont
Magazine1
Magazine2
Magazine3
Magazine4
Ceci est mon principal:
ShowData Show = new ShowData();
int HowManyMagazine = Show.HowManyMagazine(1); // to make sure there is how many Magazine name in my database
//System.out.print(HowManyMagazine); //i want to make sure the data is out.
String nmeMagazine = null; // this variable for get data from return statement
// i want to store in ListNameMagazine
ArrayList<String> ListNameMagazine = new ArrayList<String>();
for (int numbeer = 0;numbeer <= HowManyMagazine ; numbeer++)
{
//Store in 1 variable String, because if arrayList it's error
nmeMagazine = Show.getResult("Select Name_Magazine from Magazine");
// Store again in array list
ListNameMagazine.add(nmeMagazine);
}
for (String s : ListNameMagazine)
{
System.out.println(s); // show the data
}
Voici ma déclaration de retour:
public String getResult(String sql)
throws SQLException
{
ResultSet rs = st.executeQuery(sql);
ResultSetMetaData resultsetmetadata = rs.getMetaData();
//String just_try = null;
while (rs.next()) {
System.out.println("Result:"+rs.getString(1));
//just_try = rs.getString(1);
//return just_try;
}
return null; //return just_try;
}
Le problème est dans l'instruction de retour.
Quand le commentaire (//) j'efface et le dernier retourne null; J'efface. Cela devient comme ici:
public String getResult(String sql)
throws SQLException
{
ResultSet rs = st.executeQuery(sql);
ResultSetMetaData resultsetmetadata = rs.getMetaData();
String just_try = null;
while (rs.next()) {
//System.out.println("Result:"+rs.getString(1));
just_try = rs.getString(1);
return just_try;
}
return just_try;
}
Quand je montre les données en utilisant cette déclaration.
for (String s : ListNameMagazine)
{
System.out.println(s); // show the data
}
le résultat uniquement
Magazine4
Magazine4
Magazine4
Magazine4
@. @ J'ai confondu où le manque @. @
mais quand je montre les données dans l'instruction de retour comme ceci
public String getResult(String sql)
throws SQLException
{
ResultSet rs = st.executeQuery(sql);
ResultSetMetaData resultsetmetadata = rs.getMetaData();
String just_try = null;
while (rs.next()) {
System.out.println("Result:"+rs.getString(1));
//just_try = rs.getString(1);
//return just_try;
}
return null;
}
Les données montrent ce que je veux. Je sais que je ne manque que quelque part mais je ne sais pas où cela @. @. J'espère que vous pourrez le trouver .THX
La solution
Votre problème est que return ne renvoie qu'une seule chose. Il y retournera immédiatement et la fonction quittera ! Vous réaccordez le nom d'un magazine just_try .
while (rs.next()) {
//System.out.println("Result:"+rs.getString(1));
just_try = rs.getString(1);
return just_try;
}
Alors, vous commencez à itérer dans rs , et vous obtenez le nom suivant:
just_try = rs.getString(1);
Ensuite, vous indiquez le code pour renvoyer just_try.
return just_try;
À ce stade, just_try sera renvoyé et la fonction quittera! Je pense que votre problème est que vous vous attendez à ce que la fonction continue à fonctionner et à renvoyer des valeurs au code qui l'appelle, mais ce n'est pas ainsi que cela fonctionne.
Je soupçonne que vous voulez faire quelque chose comme ceci:
ArrayList<String> ListNameMagazine;
ListNameMagazine = Show.getResult("Select Name_Magazine from Magazine");
puis dans la fonction getResult:
public ArrayList<String> getResult(String sql) throws SQLException {
ResultSet rs = st.executeQuery(sql);
ResultSetMetaData resultsetmetadata = rs.getMetaData();
ArrayList<String> returnArrayList = new ArrayList<String>();
while (rs.next()) {
returnArrayList.add(rs.getString(1));
}
return returnArrayList;
}
Autres conseils
xan: votre méthode renvoie une chaîne pendant que vous essayez de renvoyer une liste.
La signature doit être remplacée par
public List<String> getResult(String sql) throws SQLException;