2014-09-26 3 views
1

작은 데이터베이스 DDL 스크립트와 많은 수의 INSERT 및 UPDATE 기반 데이터베이스를 생성해야하므로 형식 관련 DB 방언 독립 SQL 생성기로 jOOQ를 사용할 것을 고려하고 있습니다. 더 큰 응용 프로그램 내에서 즉시 진술. 그런 다음 파일을 다운로드로 제공합니다.다른 SQLDialect에서 JOOQ Metamodel에서 스키마 생성

나는 MySQL에서 수동으로 초기 DB 스키마를 생성하고이를 사용하기 위해 jOOQ 클래스를 생성했다. 현재 JOOQ는 빈 MySql 스키마에 많은 수의 삽입을 생성하는 데 사용됩니다. 이것은 잘 작동합니다.

내가 다른 DB 제도의 선택에 수출 할 수있는 사용자 제공하고 싶습니다 : sqlite, MySQL/Maria, Postgres 및 라이센스 어쩌면 Access 다음, 상업 경우, Oracle 등 예를 물론

List<DSLContext> dbdialects = new ArrayList<DSLContext>(); 
    dbdialects.add(using(SQLDialect.MYSQL)); 
    dbdialects.add(using(SQLDialect.FIREBIRD)); 
    dbdialects.add(using(SQLDialect.SQLITE)); 
    //other dialects including MS Access available via commercial license. 

    for (DSLContext create : dbdialects) { 

     String dialect = create.configuration().dialect().toString(); 
     String sql = create.insertInto(EMPLOYEES) 
       .set(EMPLOYEES.FIRST_NAME, fn) 
       .set(EMPLOYEES.LAST_NAME, ln) 
       .getSQL(ParamType.INLINED); 
     System.out.println(dialect + "\t" + sql); 
    } 

, 나는 각 RDBMS에 대한 손으로 기본 스키마를 다시 만들 수 있습니다,하지만이 발생하기 쉬운, 지루한 오류이며 불필요한 것 : 내가 만든 jOOQ에서 생성 된 메타 모델을 사용하는 영리한 방법이없는 내 MySQL DB 스키마를 사용하여 다른 SQL 방언의 스키마를 생성 하시겠습니까?

답변

0

이 기능은 #3160으로 jOOQ 3.8에 추가 된 DSLContext.ddl() 방법을 통해 사용할 수 있습니다. 단지 등의 ddl() 방법에 테이블 이름 또는 스키마 이름을 전달 DDL 쿼리 (CREATE TABLE, ALTER TABLE ADD CONSTRAINT 등)을 생성하고 실행하기 위해

: 피드백에 대한

Queries queries = DSL.using(configuration).ddl(EMPLOYEES); 
for (Query query : queries) 
    query.execute(); 
+0

감사합니다 - 확실히 유지합니다 우리의 레이더 에서이 프레임 워크! – sprockets

+0

@sprockets : 좋습니다! 나는 당신의 재미있는 유스 케이스에 대해 더 많이 배우고 싶다. 빠른 채팅을 원하시면 Google에 문의하십시오. –

+0

최신 버전이 있습니까? –