-1

我正在尝试从相同 where 条件返回的多行中获取所有结果:

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 页面中的显示应该为返回的每一行创建文本字段。有什么想法吗?

4

2 回答 2

3

您可以返回 aList<String>或使用 char 将多个字符串分隔在一个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 注入。请注意,您的参数应与查询分开发送。可能你可以改进你的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;
}
于 2013-07-03T19:25:06.360 回答
0

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

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

使用 - while (rsData.next())

如果您希望代码安全,尽管@Luiggi Mendoza 的答案是最好的

于 2013-07-04T07:42:04.677 回答