2017-01-24 5 views
1

я стараюсь, чтобы получить все Columns из в Table с JOOQ из базы данных H2 (для тестирования - позже это может быть что-то вроде MySQL или PostGRE)JOOQ получить столбцы из таблицы

все нормально, но когда я петля через мой извлеченной Columns и записывать результаты в консоли я заметил проблемы (? возможно это ошибка)

мой код журнала выглядит следующим образом:

System.out.println(String.format("%d > [%s].[%s].[%s]", col.getOrdinalPosition(), col.getTableCatalog(), col.getTableName(), col.getColumnName())); 

и выход из моей таблицы заключается в следующем:

0 > [TEST].[PERSON].[PERSON] 
1 > [TEST].[PERSON].[PERSON] 
2 > [TEST].[PERSON].[PERSON] 

я ожидал, что это будет:

0 > [TEST].[PERSON].[ID] 
1 > [TEST].[PERSON].[FIRSTNAME] 
2 > [TEST].[PERSON].[LASTNAME] 

как создать сценарий для таблицы:

CREATE TABLE PERSON 
(
    ID   INTEGER  NOT NULL, 
    FIRSTNAME VARCHAR(255), 
    LASTNAME VARCHAR(255) 
); 

ALTER TABLE PERSON 
    ADD PRIMARY KEY (ID); 

так, наконец, мой вопрос : как я могу получить «реальное» имя столбца?

EDIT: пытался использовать JOOQ версии 3.9.0 и 3.9.1

UPDATE: Я нашел другой способ получить колонные имена:

, если у вас уже есть экземпляр Table<?> вы можете использовать этот код исправить ошибку

// ordinal position starts at 1 but the fields-array starts at 0! 
Field<?> f = tbl.fields()[col.getOrdinalPosition() - 1]; 
// this is needed due a bug in JOOQ, where the ColumnName is returned incorrect 
col.setColumnName(f.getName()); 

Вопрос: Откуда берутся колонки? Ответ:

DSLContext dslCtx = DSL.using(cfg); 
InformationSchema is = dslCtx.informationSchema(tbl); 
List<Column> columns = is.getColumns(); 

Класс Column вне org.jooq.util.xml.jaxb.Column пакета JOOQ «s;

+0

@LukasEder я добавил ответ на свой вопрос к моему первоначальному вопросу; его выход из пакета 'JOOQ' org.jooq.util.xml.jaxb.Column' – lumo

+0

О, извините, спасибо за разъяснение. Ответит, скоро –

+0

Забыл сказать: Спасибо за сообщение об этой проблеме, кстати! –

ответ

Смежные вопросы