Java 是否将dinamic SQL查询保存到CSV?

Java 是否将dinamic SQL查询保存到CSV?,java,sql,csv,Java,Sql,Csv,我想在CSV文件上打印查询结果。问题是用户可以从应用程序写入查询,因此每次查询都会更改(即使只有SELECT操作可用) 知道如何从结果集中提取数据并将其打印到CSV上吗?好的,我尝试了另一种方法: PrintWriter csvWriter = new PrintWriter(new File(path + "SqlClient_" + date + ".csv")) ; ResultSetMetaData meta = rs.getMetaData() ; int numberOfColum

我想在CSV文件上打印查询结果。问题是用户可以从应用程序写入查询,因此每次查询都会更改(即使只有SELECT操作可用)


知道如何从
结果集中提取数据并将其打印到CSV上吗?

好的,我尝试了另一种方法:

PrintWriter csvWriter = new PrintWriter(new File(path + "SqlClient_" + date + ".csv")) ;
ResultSetMetaData meta = rs.getMetaData() ; 
int numberOfColumns = meta.getColumnCount() ; 
String dataHeaders = "\"" + meta.getColumnName(1) + "\"" ; 
for (int i = 2 ; i < numberOfColumns + 1 ; i ++ ) { 
            dataHeaders += ",\"" + meta.getColumnName(i) + "\"" ;
}
csvWriter.println(dataHeaders) ;
while (rs.next()) {
        String row = "\"" + rs.getString(1) + "\""  ; 
        for (int i = 2 ; i < numberOfColumns + 1 ; i ++ ) {
             row += ",\"" + rs.getString(i) + "\"" ;
        }
csvWriter.println(row) ;
}
csvWriter.close();
PrintWriter csvWriter=新的PrintWriter(新文件(路径+“SqlClient”+日期+”.csv));
ResultSetMetaData meta=rs.getMetaData();
int numberOfColumns=meta.getColumnCount();
String dataHeaders=“\”“+meta.getColumnName(1)+”\”;
对于(inti=2;i

现在可以很好地打印行,但不能打印列,因为整行都放在一列上,所以行不会被拆分。

您可以很容易地完成这项工作。您只需从用户的输入查询中获取
结果集
,然后执行以下操作:

CsvRoutines routines = new CsvRoutines();
routines.write(resultset, new File(path + "SqlClient_" + date + ".csv"), "UTF-8");
write()方法处理所有事情。例程自动关闭
结果集
和输出文件

如果要格式化特定列或类型(如日期)的输出,可以配置
ObjectRowWriterProcessor
,例如:

ObjectRowWriterProcessor processor = new ObjectRowWriterProcessor();

//assigns a "global" date format conversion for any Timestamp that gets written.
processor.convertType(java.sql.Timestamp.class, Conversions.toDate("dd/MM/yyyy HH:mm"));

//you can also define field-specific conversions, which will override the default setting for timestamps defined above.    
processor.convertFields(Conversions.toDate("dd/MM/yy")).set("created_date", "updated_date");
processor.convertFields(Conversions.trim(), Conversions.toLowerCase()).set("name", "city", "etc");

CsvWriterSettings writerSettings = new CsvWriterSettings();
writerSettings.setRowWriterProcessor(processor);

CsvRoutines routines = new CsvRoutines(writerSettings);
routines.write(rs, outputWriter);

希望这有帮助

我尝试将结果保存在向量上,但这不是一个好的解决方案,因为每行都打印对象,而不是信息。请尝试使用ArrayList