2012-08-05 2 views
0

나는 Apache DdlUtils을 사용하여 PostgreSQL 데이터베이스에 테이블 및 컬럼 메타 데이터 (javax.persistence-annotated 엔티티 bean을 자동으로 생성하는 것을 목표로 함)를 쿼리합니다. 그러나 그것은 나를 자동으로 증분 열에서 사용되는 시퀀스의 이름을 얻는 방법을 제공하지 않습니다 DdlUtils 라이브러리 것 같습니다. 클래스는 자동 증가 상태를 쿼리하는 isAutoIncrement 메서드를 제공하지만 관련 시퀀스 이름을 가져 오는 방법을 찾을 수 없습니다. 이것은, PostgreSQL의에서 DDL의 일부 예 :Apache DdlUtils :: 자동 증가 키의 시퀀스 이름을 얻는 방법은 무엇입니까?

orders=# \dS customer 
         Table "public.customer" 
    Column  |  Type  |     Modifiers 
---------------+-------------------+-------------------------------------------------- 
id   | integer   | not null default nextval('cst_id_seq'::regclass) 
name   | character varying | not null 
(...) 

내가 직접 정보의 비트를 얻는 대신 일부 메타 데이터/카탈로그 테이블을 쿼리해야 하는가?

+0

을하지 않음 데이터베이스는 시퀀스를 자동으로 생성하여 자동 증분 열을 구현합니다. (IIRC, MySQL이나 SQL Server는 마찬가지입니다.) DdlUtils는 여기에 유연성보다는 이식성을 선호 할 수 있으며 가능한 경우 특별한 API를 제공하지 않을 수 있습니다. – millimoose

답변

0

단지 millimoose 제안 처럼, 내 자신의 질문 ... 엡 응답, 그것은 DdlUtils 함께 할 당신은 INFORMATION_SCHEMA.COLUMNS 테이블 쿼리가 될 수 없다 : 모든를

public String getPostgreSQLSequenceForColumn(String database, String table, String column) { 
    try { 
     Statement stmt = connection.createStatement(); 
     String sql="select column_default from information_schema.columns where "+ 
        "table_catalog='"+database+"' and "       + 
        "table_schema='public' and "         + 
        "table_name='"+table+"' and "         + 
        "column_name='"+column+"'"; 
     ResultSet rs = stmt.executeQuery(sql); 
     rs.next(); 
     String sequenceName = rs.getString(1); 
     panicIf(rs.next()); 
     return sequenceName; 
    } catch (Exception e) { 
     throw new ExceptionAdapter(e); 
    } 
} 
관련 문제