2012-08-05 121 views
0

我使用Apache DdlUtils来查询PostgreSQL数据库中的表和列元数据(最终目标是自动生成javax.persistence注释的实体bean)。但是,在我看来,库并不提供获取自动增量列中使用的序列名称的方法。 类提供了一个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 2012-08-05 01:26:31

回答

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); 
    } 
}