java - 打开CSV将结果集导出为字符串类型

标签 java csv export-to-csv opencsv

我想将 SQL 查询的结果集导出到 CSV 文件。我正在使用 opencsv 导出到 CSV 文件。我正在使用下面的代码来实现它。

ResultSet rs = statement.executeQuery(queryString);
CSVWriter writer = new CSVWriter(new fileWriter "testFile.csv"), '|',CSVWriter.NO_QUOTE_CHARACTER);
writer.writeAll(rs, true);

但我面临的问题是,它自动导出到来自结果集的数据库列的数据类型。

示例:如果我的 CSV 文件中的数据类型为 float 的列,我看到的值为 100.00,而对于另一列,我看到的值为 2.041928E+8,即 204192800。

但我想将 CSV 文件导出为字符串类型。该值与数据库中的值相同。

如何使用 opencsv 将结果类型导出到具有字符串数据类型的 CSV 文件?

最佳答案

另一个解决方案是, 使用您的真实结果集(源)创建自定义结果集包装器并调用

此外,您还可以创建自定义 ResultSetMetaData Wrapper 来响应 ColumnType 有 String。

    writer.writeAll(new MyResultSet(rs), true);

//Wrapper class

public class MyResultSet implements Resultset{

 public MyResultSet(Resultset source, Map<String, NumberFormat > formatters){
//setting constructor properties and you can read here SQL resultset Metadata to complete    formatters
}

 //.... you will implement all sql.Resultset methods

  //example to implements

 public String getString(String columnName){
    return formatters.get(columnName).format(source.getInt(columnName));
  }

 public ResultSetMetaData getMetaData(){
   return new MyResultSetMetaData(source);
 }

} 

}
//
   public MyResultSetMetaData implements ResultSetMetaData{
 //will implement all ResultSetMetaData methods,

   //replace Numeric to String the column Type, then the value has retrieved by getString(column)
       public int getColumnType(int columnIndex){
  return Types.VARCHAR;

}

}

关于java - 打开CSV将结果集导出为字符串类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19726558/

相关文章:

Android - Google Drive REST API - 向 CSV 文件添加一行

java - 如何在项目reactor中设置阻塞异步请求/响应?

java - 是否需要在每次查询时关闭实体管理器?

java - 如何通过使用 OpenCsv 记录无效记录的错误来创建有效 CSV 记录的列表?

mysql - 如何将bak文件转换成sql文件(支持sql bak文件转mysql)并执行该文件自动恢复

python-3.x - 如何使用 pandas 获取某种格式的表格并导出为 csv?

java - 将资源和服务代码添加到 Jlink 镜像

java - AbstractActions 的枚举集包装器

c# - 使用 File.Move 错误时无法创建文件

python - xls 到 csv 转换器