簡體   English   中英

條件返回多行的選擇語句

[英]select statement where condition returns multiple rows

我試圖從相同的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頁面中顯示的內容應為返回的每一行設置文本字段。 有什么想法嗎?

您可以返回List<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 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;
}

你應該使用while循環而不是if循環

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

使用-while(rsData.next())

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM