我试图创建方法(这是一种常见方法,以便我可以将任何Table类对象传递给它),如下所示,它将ListTableRecord作为参数并获取表名和列名,所以我正在做下面的代码。

public void getColumns(List<TableRecord> records){
    for(TableRecord record : records){
        Table table = record.getTable();

        Field[] fields = table.fields();
        for(Field field : fields){
            field.getName();
            record.getValue(field);

        }
    }
}

但是我的问题在这里如何创建TableRecord类的对象?这样我就可以调用上述方法并传递List对象的TableRecord

我正在尝试一个通用方法,该方法将获取TableRecord对象并返回数据库表名称以及该表具有的所有列。我必须为此使用TableRecord或任何其他对象,以及如何创建该对象?

我不能做这样的事情
TableRecord record = new  TableRecord()

因为它已经是一个接口,然后如何创建对象?还是我必须将另一个类传递给方法?

编辑:-

如果您看到我的代码,则可以检查以ListTableRecord作为参数的方法,以便该List可以接受任何DB表JOOQ类,例如LoginRecord.javaEmpRecord.java等。因此该方法不是通用的,并且它很广泛,开发人员可以传递任何类型的Jooq由此创建表类对象。现在我有了'List<TableRecord>'对象,现在我必须获取columnName或fieldName及其值,这意味着这些字段包含的数据,以便可以将数据设置为将与UI交互的另一个bean类。

最佳答案

首先,您需要知道TableRecord是一个接口,因此很明显您无法在代码中创建它。您需要做的是找到实现此接口并符合您要求的类。由于jooq层次结构非常复杂,因此我尝试向您展示如何找到最佳选择。

public interface TableRecord<R extends TableRecord<R>> extends Record

那么该接口位于:
public interface UpdatableRecord<R extends UpdatableRecord<R>> extends TableRecord<R>

jooq有它的实现:
public class TableRecordImpl<R extends TableRecord<R>> extends AbstractRecord implements TableRecord<R>
public class AddressRecord extends org.jooq.impl.UpdatableRecordImpl<AddressRecord> implements org.jooq.Record8<Integer, String, String, String, Float, Float, Integer, String>
public class UpdatableRecordImpl<R extends UpdatableRecord<R>> extends TableRecordImpl<R> implements UpdatableRecord<R>

练习时间

这只是Jooq的基础脚手架,但有一点很重要。就使用jooq而言,您更有可能生成了表,并在代码中为每个数据库表记录了表。
看起来可能像:
public class AddressRecord extends org.jooq.impl.UpdatableRecordImpl<AddressRecord> implements org.jooq.Record8<Integer, String, String, String, Float, Float, Integer, String>

因此,您的所有记录都扩展了org.jooq.impl.UpdatableRecordImpl<AddressRecord>,实际上是implements TableRecord<R>
方法参数

至于将interface作为参数,则可以对实现TableRecord<R>的每个对象使用策略调用。在这种情况下,您可以将所有记录放在这里。
List<TableRecord> records = new List<TableRecord>();
records.add(new AddressRecord());
records.add(new CityRecord());
records.add(new UserRecord());

编辑

该代码通用吗?

如果您希望此代码适用于任何TableRecord,则此代码适合您。但是此代码严格来说不是generic,因为您不使用泛型类型。不过,我将以这种方式保留此代码。

10-06 15:52