2017-02-10 4 views
1
SELECT col_name1, col_name2, col_name3 from Table_Name; 

Я использую выше SQL-запрос, и мне нужно получить все значения в col_name3, который имеет более 5 значений.Java - MySql: запрос, чтобы получить все значения столбца

Я использую:

while(rs.next()){ 
    String value1 = rs.getString("col_name3"); 
    String value2 = rs.getString("col_name3"); 
} 

Но все значения в строке значению1 и значение2 последнее значение col_name3. Зачем?

+0

Вы получаете 'col_name3' для' value1' и 'value2' в цикле while. Из цикла 'While' вы получаете последнее значение строки, хранящееся в' value1' и 'value2'. Как отметил @Mike, вам нужен список массивов для работы без цикла! – MohaMad

ответ

2

Если вы хотите, чтобы получить только результат одного столбцов, то вы можете использовать List<String>

List<String> list = new ArrayList<>(); 

while(rs.next()){ 
    list.add(rs.getString("col_name3")); 
} 

Если вы хотите, чтобы получить все столбцы, то вам необходимо изменить тип вашего списка к объекту:

List<MyObject> list = new ArrayList<>(); 

while(rs.next()){ 
    list.add(new MyObject(rs.getString("col_name1"), rs.getString("col_name2"), rs.getString("col_name3"))); 
} 

Вы можете создать класс, который содержит все столбцы вашего объекта, например:

Class MyObject{ 
    private String col1; 
    private String col2; 
    private String col3; 

    //Constructor 
    public MyObject(String col1, String col2, String col3){ 
     this.col1 = col1; 
     this.col2 = col2;  
     this.col3 = col3 
    } 

    //getter and setters 
} 

EDIT

Если вы хотите, чтобы показать вашу информацию у вас есть два способа, как первые сказал @Mick Мнемоник в комментариях override toString() в вашем классе MyObject, как это:

@Override 
public String toString() { 
    return "MyObject{" + "col1=" + col1 + ", col2=" + col2 + ", col3=" + col3 + '}'; 
} 

и ваш цикл должен выглядеть следующим образом :

for(int i = 0; i<list.size; i++){ 
    System.out.println(list.get(i)); 
} 

Или вы можете получить поэлементно:

for(int i = 0; i<list.size; i++){ 
    System.out.println(list.get(i).getCol1() + " " + list.get(i).getCol2()); 
} 
+0

при повторении с помощью System.out.println (list.get (i)); я получаю этот неправильный вывод: [email protected] [email protected] com.yoga.studentsmark.MyObject @ 64e265d0 [email protected] [email protected] [email protected] [email protected] com.yoga.studentsmark. MyObject @ 6d581e80 [email protected] [email protected] – balan

+0

какая ошибка получить у @balan –

+0

Вы должны переопределить 'ToString()' в 'MyObject' вернуть каскадный список всех значений столбца. –

1

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

List<string> myValues=new List<string>(); 
while(rs.next()){ 
    myValues.Add(rs.getString("col_name3")); 
} 
2

Эта проблема в том, что если вам нужно хранить все данные, которые вы не можете сделать это только объект А «String», но с коллекции, может быть так, что вы будете делать:

Так как вы делаете, вы каждый раз сохраняете новую строку в value1 и value2, перезаписывая предыдущие значения, чтобы вы получили только последний.

С помощью коллекции вы можете динамически хранить «String», который вы получаете в «ResultSet», и сохранить их все.

Тогда работать на них вы можете использовать Foreach так:

for(String value : list){ 
    System.out.prinln(value); 
} 

Это будет отображаться в консоли каждое значение в списке «».

Смежные вопросы