2017-02-10 61 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

您在while循環中爲'value1'和'value2'獲取'col_name3'。 從'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 
} 

編輯

如果你想展示你的信息,你有前兩種方式就像@Mick助記符在你的類MyObject來這樣評論override toString()說:

@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

你需要重寫'MyObject'中的'toString()'來返回一個連接列表所有列值。 –

1

因爲每次覆蓋以前的值。嘗試使用列表:

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

這個問題,因爲如果你需要存儲所有的數據,你不能只用一個「字符串」對象,但有收藏,也許這樣你會做這樣做:

List<String> list = new ArrayList(); 
while(rs.next()){ 
    String value=rs.getString("col_name3"); 
    list.add(value); 
} 

因爲如果你這樣做,你每次在value1和value2中存儲一個新的字符串,覆蓋以前的值,這樣你只會得到最後一個值。

通過使用集合,您可以動態存儲'ResultSet'中的'String'並將其全部保存。

然後對它們進行操作,你可以使用foreach這樣的:

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

這將在控制檯顯示在「名單」的每個值。