将地图列表写入CSV

时间:2017-04-25 01:26:09

标签: java csv jdbc hashmap opencsv

我有一个独立的应用程序,它连接到SQL数据库并将ResultSet保存在Map列表中。这就是我到目前为止所做的:

List<Map<String, Object>> rows;
stmt = conn.createStatement();
Resultset rs = stmt.executeQuery(queryString);
ResultSetMetaData rsmd; //Properties of Resultset object and column count

while(rs.next){
  Map<String, Object> rowResult = new HashMap<String, Object>(columnCount);
   for(int i =1; i <=columnCount; i++){
     rowResult.put(rsmd.getColumnName(i), rs.getObject(i));
   }
  rows.add(rowResult);
}

//WRITE TO CSV  
String csv = "C:\\Temp\\data.csv";
CSVWriter writer = new CSVWriter(new FileWriter(csv));

//Write the record to file
writer.writeNext(rows);

//close the writer
writer.close();

如何将列的“行”添加到带有列的csv?任何线索和建议。非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

由于每条记录的顺序都相同,所以我只会使用 float3 u = vects[i-1].position[i-1];//<-- error! float3 v = vects[i].position;//<-- error! 作为行。

对于标题,您不需要在每一行都获取它们。就这样得到它们:

List<List<Object>>

接下来,你可以得到这样的行:

List<String> headers = new ArrayList<>();
for (int i = 1; i <= columnCount; i++ )
{
    String colName = rsmd.getColumnName(i);
    headers.add(colName);
}

最后,要创建CSV文件,您可以执行以下操作:

List<List<Object>> rows = new ArrayList<>();

while(rs != null && rs.next)
{
   List<Object> row = new ArrayList<>();
   for(int i =1; i <=columnCount; i++)
   {
       row.add(rs.getObject(i));
   }
   rows.add(row);
}

注意:在我的代码示例中,我正在使用Type Inference

Try-With-Resources Statement

答案 1 :(得分:0)

老老实实,我建议您使用writeAll method in CSVWriter and pass in the ResultSet

writer.writeAll(rs, true);

第二个参数是包含列名,因此csv文件中的第一行将是列名。然后,当您阅读文件时,如果您愿意,可以将其翻译回您的地图(虽然它将是所有字符串,除非您知道何时阅读它的类型)。

希望有所帮助。

斯科特:)