2016-12-12 5 views
1

質問の結果をCSVファイルに出力したい。問題は、ユーザーがアプリケーションからクエリを書くことができるため、クエリが毎回変更される(SELECT操作のみが利用可能な場合でも)。CSVにディナミックSQLクエリを保存しますか?

どのように私はResultSetからデータを抽出してCSVで印刷できますか?

+0

役立ちますVector >しかし、各行はオブジェクトではなく情報を出力するので、良い解決策ではありません。 – Removed

+0

ArrayListを使用しようとする Jobin

答えて

0

がOK iは異なるアプローチで試み:

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(); 

行全体が単一の列に置かれるので、行が分割されていないので、ここで行は列良い印刷なくれます。

1

univocity-parsersでこれを簡単に行うことができます。あなただけのユーザの入力クエリからResultSetを取得し、これを実行する必要があります。

CsvRoutines routines = new CsvRoutines(); 
routines.write(resultset, new File(path + "SqlClient_" + date + ".csv"), "UTF-8"); 

write()メソッドは、すべての世話をします。 resultsetと出力ファイルはルーチンによって自動的に閉じられます。

あなたが特定の列または(日付など)のタイプの出力をフォーマットしたい場合は、例えば、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); 

ホープこれは私が上の結果保存しようとした

関連する問題