views:

451

answers:

2

I have problem with return statment >.< I want to store all magazine names into

ArrayList<String> ListNameMagazine = new ArrayList<String>();

I have a DB; in the DB there is a table name_magazine and the data in name_magazine is

Magazine1

Magazine2

Magazine3

Magazine4

This my main:

    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
    }

This is my return statement:

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;
}

The problem is in return statement.

When the comment ( // ) I erase and the last return null; I delete. It become like here:

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;
 }

When I show the data using this statement.

for (String s : ListNameMagazine)
    {
        System.out.println(s); // show the data
    }

the result only

Magazine4

Magazine4

Magazine4

Magazine4

@.@ I have confuse where the miss @.@

but when I show data in return statement like this

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;
}

The data show what I want. I know I only miss in somewhere but I don't know where that @.@. I hope you guys can found it .THX

+8  A: 

Your problem is that return returns only one thing, and it will return immediately and the function will exit! You are retuning the name of a magazine just_try.

while (rs.next()) { 

    //System.out.println("Result:"+rs.getString(1));

   just_try = rs.getString(1);

  return just_try;

}

So, you start iterating through rs, and you get the name:

just_try = rs.getString(1);

And then you tell the code to return just_try.

return just_try;

At this point just_try will be returned and the function will exit! I think your problem is that you are expecting the function to keep going, and to keep returning values to the code that calls it, but this is not the way it works.

I suspect what you want to do is something like this:

ArrayList<String> ListNameMagazine;
ListNameMagazine = Show.getResult("Select Name_Magazine from Magazine");

then in the function 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;

}
xan
THX. it's working
ferdinand
No probs. Double check it because I made a mistake in the method name (the return type was still string, I forgot to change it).
xan
+2  A: 

xan: Your method returns a String, while you try to return a list.

The signature must be changed to

public List<String> getResult(String sql) throws SQLException;
Pål GD
not List but ArrayList<String>public ArrayList<String> getResult(String sql) throws SQLException ^^ thx
ferdinand
No, it seriously should be List<String>.
Pål GD
thanks guys - I'm kinda busy at work and forgot to update the signature when I copied it from the questions.Cheers!
xan
You should return List<String>; the implementation doesn't really matter, and you might want to change it at a later date (if you decide there's a more appropriate list implementation to use). In this case, all you want to guarantee is that you can treat it like a list, so code to the interface.
Rob