2013-07-03 5 views
-1

Я пытаюсь получить все результаты из нескольких строк, возвращаемых тем же, где условие:оператор выбора, когда условие возвращает несколько строк

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 должен создавать текстовые поля для каждой возвращаемой строки. Любые мысли?

ответ

3

Вы можете вернуть List<String> или использовать символ для разделения нескольких строк в одном String. ИМО было бы лучше, возвращая 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; 
} 
+0

[xkcd.com/327/](http://xkcd.com/327/) – jlordo

+0

@jlordo Я знаю эту шутку (и прочитал ее, когда Мне скучно) извините, просто обновил ответ. Кстати, я просто уважал текущий код OP. –

+0

+1 для лучшего решения – jlordo

0

следует использовать в то время как петли вместо если петля

вместо - если (rsData.next())

использование - в то время как (rsData.next())

Хотя ANS wer of @Luiggi Mendoza лучше всего, если вы хотите, чтобы в вашем коде была безопасность.