select语句where条件返回多行

时间:2013-07-03 19:21:42

标签: java sql jsp

我试图从同一条件返回的多行返回所有结果:

public static String getResult(String mycondition)
   {    
      ResultSet rsData = sql.RunSelect("select col1 from my_table where con ='"+myCondition+"'");
      if (rsData.next())
      {
         String result = rsData,getString("col1");
      }
   }

请注意,有一个id列使这些行可以区分。 jsp页面中的显示应该为返回的每一行创建文本字段。 有什么想法吗?

2 个答案:

答案 0 :(得分:3)

您可以返回List<String>或使用字符来分隔单个String中的多个字符串。 IMO最好返回List<String>

public static List<String> getResult(String mycondition) {
    List<String> results = new ArrayList<String>();
    ResultSet rsData = sql.RunSelect("select col1 from my_table where con='"
        +myCondition+"'");
    while (rsData.next()) {
        results.add(rsData.getString("col1"));
    }
    return results;
}

此外,此方法易于SQL Injection。请注意,您的参数应该与查询分开发送。您可以改进sql.RunSelect方法以使用PreparedStatement代替Statement。这是代码框架的基本示例:

public ResultSet runSelect(String query, Object ... params) {
    //assumes you already have your Connection
    PreparedStatement pstmt = con.prepareStatement(query);
    int i = 1;
    for(Object param : params) {
        pstmt.setObject(i++, param);
    }
    return pstmt.executeQuery();
}

现在您可以将方法修改为

public static List<String> getResult(String mycondition) {
    List<String> results = new ArrayList<String>();
    //using the new runSelect method
    ResultSet rsData = sql.runSelect(
        "select col1 from my_table where con=?", mycondition);
    while (rsData.next()) {
        results.add(rsData.getString("col1"));
    }
    return results;
}

答案 1 :(得分:0)

你应该使用while循环而不是if循环

而不是 - if(rsData.next())

use - while(rsData.next())

虽然@Luiggi门多萨的回答最好,如果你想要代码中的安全性

相关问题