2012-04-23 4 views
1

안녕하세요, 여러분!DB에서 Postgres SQL 스크립트를 생성하는 Java 라이브러리

스트레이트 포인트입니다. DB에서 Postgres SQL 스크립트를 생성 할 자바 라이브러리가 있습니까? 예를 들어

나는 내가 문자열 SQL 스크립트 종류의 같은이

String sqlInsert = 

    "INSERT INTO job_table(name, job) VALUES ('Andy', 'pull');"+ 
    "INSERT INTO job_table(name, job) VALUES ('Benny', 'push');"; 

또는 무언가 같이 얻을 싶어, 그리고

name | job 
    Andy | pull 
    Benny | push 

job_table 테이블이 있습니다.

아무도 몰라요?

Nb : 수동으로 생성하기 위해 자바에서 내 자신의 코드를 작성했습니다. 하지만 나는 그것을 싫어합니다. :)

감사합니다.

+1

pg_dump 유틸리티를 사용하여 데이터베이스를 직접 백업 할 수없는 이유가 있습니까? –

+0

그래, 나는 클라이언트가 그것을 얻을 수 있고 직접 실행할 수 있도록 내 webservice에 대한 문자열을 사용하고 싶습니다. 우리는 클라이언트에게 다른 형식의 예제를 줄 수 있다는 것을 알고 있습니다. 예를 들어 json이나 xml을 사용할 수 있지만 어떤 이유에서든 해당 문자열을 내 클라이언트에 제공해야합니다. – ilyasfals

+0

JDBC를 통해 COPY 할 것인지 (대답 참조) 또는 INSERT가 엄격히 필요합니까? 그렇다면 지금 당장 pg_dump에 대한 쉬운 대안이 없으므로 "pg_dump --data-only --table = sometable"을 쉘 아웃해야하고 stdout을 읽어야합니다. –

답변

2

COPY 명령에 PgJDBC 지원을 사용하여 탭 구분 또는 CSV 데이터를 데이터베이스에 제공하고 동일한 형식으로 추출하십시오. 을 원하며 PgConnection에서 얻을 수 있습니다.

CopyManager는 현재 상당히 유감스럽게도 문서화가되지 않았지만 COPY 명령에 대한 래퍼 일뿐입니다.

java.sql.Connection을 PgConnection으로 캐스팅하여 PgConnection 인터페이스에 액세스하십시오. 연결 풀링 서비스가 랩핑을 풀면 PgJDBC에 의해 반환 된 실제 기본 연결을 얻기 위해 연결 풀링 서비스를 풀어야 할 수도 있습니다. JPA를 사용한다면 PgJDBC와의 실제 연결에 액세스하거나 새로운 JPA 연결을 만들어야합니다.

실제로 데이터베이스에 데이터를 전달하는 효율적인 방법이 아닌 INSERT 문이 필요한 경우 사용자의 특정 요구 사항은 무엇입니까? 이식성? 그렇다면 어떻게 숫자/숫자/다른 표현의 다른 표현과 같은 것을 처리 할 수 ​​있습니까?

"표준"데이터 유형 만 처리해야하는 경우 손으로 코드를 감아 넣는 것이 가장 좋은 방법 일 수 있습니다.

엄격하게 안전한 방법은 현재 pg_dump를 사용하는 것입니다. pg_dump --data-only --table=thetable 프로세스를 호출하고 stdout에서 읽기 작업을 수행 할 수 있습니다. 그러나 (a) 컨테이너의 데이터 소스 또는 삽입 된 엔티티 관리자가 아니라 앱의 DB 세부 정보를 직접적으로 파악해야합니다. (b) pg_dump 경로에 대한 지식, (c) 외부 프로세스를 실행하기위한 보안 권한. 불행히도 현재 그 주변에는 어떤 방법도 없습니다. pg_dump는 라이브러리로 사용하도록 설계되지 않았습니다 (비록 변환하는 것에 대한 이야기가 있긴하지만). 그렇더라도 JNI 등으로 포장해야하는 C 라이브러리가 될 것입니다. Ick.

관련 문제