2

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

しかし、私が直面している問題は、結果セットからのデータベース列のデータ型に自動的にエクスポートされることです。

例: データ型が float の CSV ファイルのデータ型を持つ列の場合、100.00 と表示され、別の列の値は 204192800 の 2.041928E+8 と表示されます。

しかし、文字列型にエクスポートするCSVファイルが必要です。データベースにあるそのままの値。

opencsv を使用して、結果タイプを文字列データ型の CSV ファイルにエクスポートするにはどうすればよいですか?

4

4 に答える 4

1

そして別の解決策は、実際の結果セット(ソース)を使用してカスタム ResultSet ラッパーを作成し、呼び出すことです

また、カスタム ResultSetMetaData ラッパーを作成して、ColumnType has 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;

}

}
于 2013-11-01T12:48:21.250 に答える
0

SQl has String の例を作成できます。

オラクルの例:

  select num||'',to_char(num2) from xxx 

または、Sql数値フォーマッタと、数値ではなく文字列値を含む結果セット応答を使用します。

于 2013-11-01T12:38:45.143 に答える
0

最善の方法は

writer.setResultService(new MyResultSetSevice());
writer.writeAll(rs, true);

クラスを作成します

  //http://opencsv.sourceforge.net/apidocs/index.html?au/com/bytecode/opencsv/CSVWriter.html
  public class MyResultSetSevice implements ResultSetHelper{


  public String[] getColumnValues(ResultSet rs) 
  {
      return formattedColumnValues;
  }

  String[]  getColumnValues(ResultSet rs, boolean trim) {
   return formattedColumnValues;

  }
}
于 2013-11-01T13:25:12.670 に答える