2

returnステートメントに問題があります>.<すべての雑誌名をに保存したい

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

私はDBを持っています。DBにはテーブルがname_magazineあり、データname_magazine

マガジン1

マガジン2

マガジン3

マガジン4

これが私のメインです:

    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
    }

これは私のリターンステートメントです:

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

問題は return ステートメントにあります。

コメント ( // ) を消去すると、最後に null が返されます。削除します。次のようになります。

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

このステートメントを使用してデータを表示すると。

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

結果のみ

マガジン4

マガジン4

マガジン4

マガジン4

@.@ 私はミス @.@ がどこにあるか混乱しています

しかし、このようなreturnステートメントでデータを表示すると

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

データは私が望むものを示しています。私はどこかで見逃しているだけだと知っていますが、その @.@ がどこにあるのかわかりません。皆さんがそれを見つけてくれることを願っています.THX

4

2 に答える 2

8

あなたの問題は、returnが1つだけを返し、すぐに戻り、関数が終了することです! 雑誌just_tryの名前を返しています。

while (rs.next()) { 

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

   just_try = rs.getString(1);

  return just_try;

}

したがって、rsの反復処理を開始すると、次の名前が得られます。

just_try = rs.getString(1);

そして、just_try を返すようにコードに指示します。

return just_try;

この時点で just_try が返され、関数は終了します! あなたの問題は、関数が続行し、それを呼び出すコードに値を返し続けることを期待していることだと思いますが、これは機能する方法ではありません。

あなたがやりたいことは次のようなものだと思います:

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

次に、関数 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;

}
于 2008-11-30T11:30:17.163 に答える
3

xan: リストを返そうとすると、メソッドは文字列を返します。

署名を次のように変更する必要があります

public List<String> getResult(String sql) throws SQLException;
于 2008-11-30T12:03:16.443 に答える