diff --git a/jOOQ/src/main/java/org/jooq/Record.java b/jOOQ/src/main/java/org/jooq/Record.java index 6636c9e823..74d06965e8 100644 --- a/jOOQ/src/main/java/org/jooq/Record.java +++ b/jOOQ/src/main/java/org/jooq/Record.java @@ -39,7 +39,9 @@ package org.jooq; import java.beans.ConstructorProperties; import java.lang.reflect.Constructor; import java.lang.reflect.Proxy; +import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.sql.SQLData; import java.sql.Statement; import java.util.HashMap; import java.util.Map; @@ -53,11 +55,44 @@ import org.jooq.tools.Convert; import org.jooq.tools.reflect.Reflect; /** - * A wrapper for database result records returned by - * {@link SelectQuery} + * A database result record + *

+ * A record essentially combines a list of columns ({@link Field}) with a + * corresponding list of values, each value being of the respective field's + * type. + *

+ * While records can be seen as generic column / value mappings, their concrete + * implementations often specialise the above description in any of the + * following ways: + *

+ *

Table records

+ *

+ * Records originating from a concrete database table (or view) are modelled by + * jOOQ as {@link TableRecord} or {@link UpdatableRecord}, if they contain a + * primary key. If you're using jOOQ's code generator, you can generate even + * more concrete types of table records, i.e. one table record per table. + *

+ *

UDT records

+ *

+ * {@link SQLDialect#ORACLE} and {@link SQLDialect#POSTGRES} formally support + * user defined types (UDT), which are modelled by jOOQ as {@link UDTRecord}. In + * addition to being regular records (column / value mappings), they also + * implement the JDBC {@link SQLData} API in order to be streamed to a JDBC + * {@link PreparedStatement} or from a JDBC {@link ResultSet} + *

+ *

Records of well-defined degree

+ *

+ * When projecting custom record types in SQL, new ad-hoc types of a certain + * degree are formed on the fly. Records with degree <= 22 are reflected by + * jOOQ through the {@link Record1}, {@link Record2}, ... {@link Record22} + * classes, which cover the respective row value expressions {@link Row1}, + * {@link Row2}, ... {@link Row22} + *

+ * Note that generated TableRecords and UDTRecords + * also implement a Record[N] interface, if N <= 22 * * @author Lukas Eder - * @see SelectQuery#getResult() + * @see Result */ public interface Record extends FieldProvider, Attachable {