2015-01-10 6 views
0

저는 SuperCsv를 사용하여 javabeans로 csv 파일을 구문 분석 한 다음 DB 테이블에 저장합니다 . 날짜 열을 입력 할 때 다음 예외가 발생합니다. superscv API와 documetation을 읽은 후에는 CSV를 Javabean에 올바르게 작성하고 datatbase에이를 유지하는 방법을 이해할 수 없습니다. 예외 :org.supercsv.exception.SuperCsvCellProcessorException : 입력 된 값이 java.lang.String 유형이어야하지만 java.util.Date이어야합니다.

org.supercsv.exception.SuperCsvCellProcessorException: the input value should be of  type java.lang.String but is java.util.Date processor=org.supercsv.cellprocessor.ParseDate context={lineNo=2, rowNo=2, columnNo=3, rowSource=[moredata, 450, Thu Jan 01 00:09:00 PST 2015]} 

CSV 파일 :

someData,23,01/09/2015 
moredata,450,01/09/2015 
evenMoreData,500,01/09/2015 

다음과 같이 내가 CSV를 구문 분석하고 있습니다 :

private List<Timeseries> readCSVToBean() throws IOException { 
    ICsvBeanReader beanReader = null; 

    List<Timeseries> timeSeries = new ArrayList<Timeseries>(); 
    try { 
     beanReader = new CsvBeanReader(new FileReader(pathName), 
       CsvPreference.STANDARD_PREFERENCE); 

     // the name mapping provide the basis for bean setters 
     final String[] nameMapping = new String[]{"varval", "actualNum", "daterec"}; 
     //just read the header, so that it don't get mapped to Timeseries object 
     final String[] header = beanReader.getHeader(false); 
     final CellProcessor[] processors = getProcessors(); 

     Timeseries timeEntity; 

     while ((timeEntity = beanReader.read(Timeseries.class, nameMapping, 
       processors)) != null) { 
      timeSeries.add(timeEntity); 
     } 

    } finally { 
     if (beanReader != null) { 
      beanReader.close(); 
     } 
    } 
    return timeSeries; 
} 

private static CellProcessor[] getProcessors() { 

    final CellProcessor[] processors = new CellProcessor[]{ 
     new NotNull(), // varval 
     new ParseInt(), // actualNum 
     //new FmtDate("dd/MM/yyyy") 
     new ParseDate("dd/mm/yyyy") // Daterec 
    }; 
    return processors; 
} 

Timeseries 콩은 다음과 같습니다

public class Timeseries implements Serializable { 
    private static final long serialVersionUID = 1L; 

    private Integer timid; 
    private String varval; 
    private Integer actualnum; 
    private Date daterec; 

    // ... 
} 

답변

2

로 Super CSV에 문서화 됨, ParseDate은 (String ->Date)이고 FmtDate은 쓰기에 사용됩니다 (Date ->String).

읽기 전용 프로세서와 쓰기 용 프로세서가 필요합니다.