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;
@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
Oh, tut mir leid, danke für die Klärung. Werde antworten, bald –
Vergessen zu sagen: Danke, dass du dieses Problem gemeldet hast, btw! –