2017-01-24 2 views
1

ich versuche, all Columns ein Table mit JOOQ aus einer H2 Datenbank (zum Testen - später könnte es so etwas wie MySQL oder PostGRE sein) zu erhaltenjOOQ erhalten Spalten aus einer Tabelle

alles ist in Ordnung, aber wenn ich Schleife durch Columns meine abgerufen und die Ergebnisse melden Sie sich an i ein Problem Konsole bemerkt (? wahrscheinlich ein Fehler)

sieht mein Log-Code wie folgt aus:

System.out.println(String.format("%d > [%s].[%s].[%s]", col.getOrdinalPosition(), col.getTableCatalog(), col.getTableName(), col.getColumnName())); 
Dieseund die Ausgabe meiner Tabelle ist:

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

ich es erwartet:

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

als das Skript erstellen für die Tabelle ist:

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

ALTER TABLE PERSON 
    ADD PRIMARY KEY (ID); 

so endlich meine Frage ist: Wie bekomme ich den "echten" Spaltennamen?

EDIT: versucht, mit JOOQ Version 3.9.0 und 3.9.1

UPDATE: ich einen anderen Weg, um die Spalte-Namen abzurufen gefunden:

, wenn Sie bereits die Instanz von Table<?> haben, können Sie verwenden dieser Code, um den Fehler 'zu beheben'

// 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()); 

Frage: Woher kommt die Spalte? Antwort:

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

der Klasse Column ist aus JOOQ ‚s org.jooq.util.xml.jaxb.Column Paket;

+0

@LukasEder i hinzugefügt, um die Antwort auf Ihre Frage zu meiner ursprünglichen Frage; es stammt aus 'JOOQ's Paket' org.jooq.util.xml.jaxb.Column' – lumo

+0

Oh, tut mir leid, danke für die Klärung. Werde antworten, bald –

+0

Vergessen zu sagen: Danke, dass du dieses Problem gemeldet hast, btw! –

Antwort

Verwandte Themen