【问题标题】:Problem with return statementreturn 语句的问题
【发布时间】:2010-09-24 15:10:18
【问题描述】:

我的退货声明有问题>.

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

我有一个数据库;在数据库中有一个表name_magazinename_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 个空格,并且任何选项卡都应该有 4 个空格)
  • @xan - 完成。这很痛苦,但已经完成了。
  • @ferdinand:除了代码级别的问题,我还担心数据库设计。您应该阅读规范化。具有列 Magazine1..Magazine4 是否是好的数据库设计,这一点尚不清楚。

标签: java methods return


【解决方案1】:

你的问题是return只返回一件事,它会立即返回,函数会退出!您正在重新调整杂志的名称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;

}

【讨论】:

  • 没有问题。仔细检查一下,因为方法名写错了(返回类型还是字符串,忘记改了)。
【解决方案2】:

xan:您的方法返回一个字符串,而您尝试返回一个列表。

签名必须改为

public List<String> getResult(String sql) throws SQLException;

【讨论】:

  • 不是 List 而是 ArrayList public ArrayList getResult(String sql) throws SQLException ^^ thx
  • 不,应该是 List
  • 谢谢大家 - 我工作有点忙,从问题中复制签名时忘记更新签名。干杯!
  • 你应该返回 List;实现并不重要,您可能希望在以后更改它(如果您决定使用更合适的列表实现)。在这种情况下,您要保证的只是可以将其视为列表,因此对接口进行编码。
猜你喜欢
  • 2013-06-14
  • 1970-01-01
  • 2010-12-09
  • 2018-10-28
  • 2015-08-03
  • 2021-07-09
  • 1970-01-01
  • 2020-07-18
  • 2021-08-29
相关资源
最近更新 更多