2016-10-19 1 views
4

결과를 CSV 형식의 STDOUT으로 반환해야하는 쿼리를 실행합니다.최대 절전 모드를 사용하여 postgresql에서 CSV로 결과 얻기

pgAdmin에서 내 쿼리를 실행하면 결과가 성공적으로 나타납니다.

그러나 나는 다음과 같은 예외가 얻을 최대 절전 모드를 사용하여 동일한 쿼리를 실행할 때 : ResultSet의

I를 추출 할 수 있습니다 :

javax.persistence.PersistenceException : org.hibernate.exception.GenericJDBCException를 테이블 구조를 보여 주면 안된다. 그러나 sql은 괜찮다. ("sql"의 전체 내용을 복사 한 다음 pgAdmin에서 실행한다.);

String sql = "COPY (" + sqlQuery + ") TO STDOUT WITH CSV"; 

그런 다음 나는 다음과 같이 실행 : 같은 쿼리 보이는

Query query = getEntityManager().createNativeQuery(sql); 

Object result = query.getSingleResult(); // I also tried the other get results method...(`getFirstresult()` has returned 0) 

를 내가 찾은 모든 관련 질문에, 나는 OP 대신 표준 출력의 파일에 CSV를 넣어 보았다.

최대 절전 모드를 사용하여 csv 결과를 반환 할 수 있습니까?

미리 감사드립니다.

+0

여기에서 최대 절전 모드를 사용하는 이유는 무엇입니까? 간단한 JDBC 쿼리 (또는 CSV 라이브러리 플러스)는 훨씬 쉬워야합니다. –

+0

@AdrianShum 이것이이 문제를 해결할 방법입니다 ... 나는 단지 그것이 Hibernate를 사용하여 가능하지 않다는 것을 확인하고 싶습니다 ... 감사합니다! :) – SometimesNeedSomeHelp

답변

1

AFAIK, COPY은 기본적으로 PostgreSQL JDBC 드라이버 (마지막 테스트는 postgresql-9.4.1208.jre7)에서 지원되지 않습니다. 따라서, Hibernate는 명령을 실행할 수 없다. how to copy a data from file to PostgreSQL using JDBC?

하지만 개인적으로, 나는 당신이 당신의 접근 방식을 변경 옹호 것 :

당신이 정말로 당신이 CopyManager 고려해야 COPY 사용해야하는 경우

. COPY으로 데이터를로드하는 것은 나에게 일종의 해킹처럼 보입니다.

+0

대단히 멋진 답변을 주셔서 감사합니다! :) 받아 들일 만하다. 나는 투표 하겠지만, 충분한 평판이 없다. – SometimesNeedSomeHelp

0

두 줄의 코드를 사용하여 univocity-parsers으로이 작업을 수행 할 수 있습니다. 쿼리에서 결과 집합을 가져와 다음과 같이하십시오.

CsvRoutines routines = new CsvRoutines(); 
routines.write(resultset, new File("/path/to/output.csv"), "UTF-8"); 

write() 메서드는 모든 것을 처리합니다. 결과 집합은 루틴에 의해 자동으로 닫힙니다.

관련 문제