SELECT col_name1, col_name2, col_name3 from Table_Name;
我正在使用上面的SQL查询,我必须获取col_name3中具有5个以上值的所有值。
我正在使用:
while(rs.next()){
String value1 = rs.getString("col_name3");
String value2 = rs.getString("col_name3");
}
但String value1和value2中的所有值都是col_name3的最后一个值。为什么呢?
答案 0 :(得分:2)
这个问题是因为如果你需要存储所有数据,你只能使用一个'String'对象,但是如果你有这样的话,你可以这样做:
List<String> list = new ArrayList();
while(rs.next()){
String value=rs.getString("col_name3");
list.add(value);
}
因为您每次都在存储value1和value2中的新String时存储,因此会覆盖以前的值,因此您只能得到最后一个。
使用Collection,您可以动态存储“ResultSet”中的“String”并将其全部保存。
然后对它们进行操作你可以使用这样的forEach:
for(String value : list){
System.out.prinln(value);
}
这将在控制台中显示'list'中的每个值。
答案 1 :(得分: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")));
}
您可以创建一个包含Object的所有列的类,例如:
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 Mnemonic在你的类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());
}
答案 2 :(得分:1)
因为每次都覆盖以前的值。尝试使用List:
List<string> myValues=new List<string>();
while(rs.next()){
myValues.Add(rs.getString("col_name3"));
}