我想将 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/