我想从数据库列中检索数据。假如我有列'a'然后我想要该列的所有值然后我有另一列说'b'然后我想得到该列的所有值,依此类推所有列。
我的代码给了我明智的价值。首先,它将从第一行检索数据,然后从第二行检索数据,依此类推。我的代码如下。
while (rs.next()) {
for(inti=1;i<=rsMetaData.getColumnCount();i++) {
System.out.println(rs.getString(i));
}
}
请建议如何获取第一列的所有值,然后获取第二列,依此类推。
答案 0 :(得分:1)
明智地迭代数据行并转换为列方式。像这样:
ResultSet rs = con.createStatement().executeQuery("SELECT * FROM table");
ResultSetMetaData rsMetaData = rs.getMetaData();
Map<String, List<Object>> resultMap = new LinkedHashMap<>();
while (rs.next()) {
for(int i=1;i<=rsMetaData.getColumnCount();i++) {
String strColumnName = rsMetaData.getColumnName(i);
Object columnValue = rs.getObject(i);
if(resultMap.containsKey(strColumnName)){
resultMap.get(strColumnName).add(columnValue);
}else{
List<Object> resultList = new ArrayList<>();
resultList.add(columnValue);
resultMap.put(strColumnName,resultList);
}
}
}
// Iterate Data Column Wise
for(Iterator<Map.Entry<String, List<Object>>> iterator = resultMap.entrySet().iterator();iterator.hasNext();){
Map.Entry<String, List<Object>> entry = iterator.next();
System.out.println("Column Name: "+entry.getKey());
System.out.println("Column Values: "+entry.getValue());
}
答案 1 :(得分:1)
更灵活的解决方案可能会使用HashMap
而不是List
。这样,您可以将列名存储为键,这使得检索值更容易,更透明。
//declare a HashMap
Map<String,Object> hMap = new HashMap<String,Object>();
public void populateColumns(ResultSet rs) {
try{
while(rs.next()){
for (int i=1;i<=rs.getMetaData().getColumnCount();i++) {
Object obj=rs.getObject(i); //get the value for whatever column the result has
hMap.put(rs.getMetaData().getColumnName(i), obj);
} }
}catch (Exception e) {
//handle the exception
}
}
请注意,如果您想要对某些数据库类型/ Java类型进行特殊处理,则可以使用instanceof
运算符。
for (int i=1;i<=rs.getMetaData().getColumnCount();i++) {
Object obj=rs.getObject(i); /
if(obj instanceof String) //if obj is a String
hMap.put(rs.getMetaData().getColumnName(i), new String(((String)obj).getBytes("UTF-8"),"UTF-8"));
else //for every other objects
hMap.put(rs.getMetaData().getColumnName(i), obj);
更新:
要获得您想要的输出,请尝试使用
public void populateColumns(ResultSet rs) {
List<Object> list = new ArrayList<Object>();
int colCount;
try{
while(rs.next()){
colCount = rs.getMetaData().getColumnCount();
for (int i=1;i<=colCount;i++) {
Object obj=rs.getObject(i); //get the value for whatever column the result has
list.add(obj);
}
}
}catch (Exception e) {
//handle the exception
}
//
List<Object> sortedByCol = new ArrayList<Object>();
for(int j=0; j<colCount;j++){
for(int i=j; i<list.size(); i+=colCount){
sortedByCol.add(list.get(i));
}
}
输入
col a col b col c
1 row 1 2 3
2 row 1 2 3
你的输出列表(sortedByCol)将有
1, 1, 2, 2, 3, 3
答案 2 :(得分:-1)
使用逗号分隔符ArraList
中每列的字符串值喜欢的东西(抱歉不在电脑前)
ArrayList<String> columnValList = new ArrayList<>();
while (rs.next()) {
for(inti=0;i<rsMetaData.getColumnCount();i++) {
// get element for this col - create if doesnt exist
String cols = columnValList.get (i); // error checking needed
cols = cols + "," + rs.getString (i + 1);
// put it back
columnValList.set (i, cols);
}
}
之后你将得到包含第一列等所有值的元素(0)