Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建TableRecord对象?_Java_Jooq - Fatal编程技术网

Java 如何创建TableRecord对象?

Java 如何创建TableRecord对象?,java,jooq,Java,Jooq,我试图创建方法(这是一个常用的方法,因此我可以将任何表类对象传递给它)如下所示,它将TableRecord的List作为参数,并获取表名和列名,因此我在代码下面进行操作 public void getColumns(List<TableRecord> records){ for(TableRecord record : records){ Table table = record.getTable(); Field[] fields = ta

我试图创建方法(这是一个常用的方法,因此我可以将任何表类对象传递给它)如下所示,它将
TableRecord
List
作为参数,并获取表名和列名,因此我在代码下面进行操作

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
作为参数的方法,以便该
List
可以接受任何DB table JOOQ类,如
LoginRecord.java
EmpRecord.java
等。因此,该方法不是泛型的,其范围很广,开发人员可以通过此方法传递任何类型的Jooq创建的表类对象。现在我有了“
List
”对象,现在我必须获得columnName或fieldName以及它们的值,我指的是这些字段包含的数据,这样我就可以将数据设置到另一个bean类,该类将与UI交互。

首先,您需要知道
TableRecord
是一个接口,所以很明显,您不能在代码中封装它。您需要做的是找到实现此接口并符合您需求的类。由于jooq层次结构非常复杂,我试图向您展示如何找到最佳选项

public interface TableRecord<R extends TableRecord<R>> extends Record
公共接口TableRecord扩展记录
然后,该接口位于:

public interface UpdatableRecord<R extends UpdatableRecord<R>> extends TableRecord<R>
公共接口updateableRecord扩展了TableRecord
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>
公共类TableRecordImpl扩展AbstractRecord实现TableRecord
公共类AddressRecord扩展org.jooq.impl.UpdateableRecordImpl实现org.jooq.Record8
公共类UpdateableRecordImpl扩展TableRecordImpl实现UpdateableRecord
练习时间

这只是Jooq的一个基本框架,但有一点很重要。在使用jooq时,您很可能已经生成了表,并且表记录了代码中的每个数据库表。 这可能看起来像:

public class AddressRecord extends org.jooq.impl.UpdatableRecordImpl<AddressRecord> implements org.jooq.Record8<Integer, String, String, String, Float, Float, Integer, String>
公共类AddressRecord扩展org.jooq.impl.UpdateableRecordImpl实现org.jooq.Record8
因此,您的所有记录都扩展了
org.jooq.impl.updateableRecordImpl
,实际上
实现了TableRecord

方法参数

只要使用接口作为参数,就可以对实现
TableRecord
的每个对象使用polimorphic调用。在这种情况下,您可以将所有记录放在这里

List<TableRecord> records = new List<TableRecord>();
records.add(new AddressRecord());
records.add(new CityRecord());
records.add(new UserRecord());
List记录=新列表();
添加(新地址记录());
添加(新的城市记录());
添加(newuserrecord());

编辑

这是通用代码吗?


如果您希望此代码适用于任何类型的
TableRecord
,此代码非常适合您。但这段代码并不是严格意义上的泛型,因为您不使用泛型类型。尽管如此,我还是会以这种方式保留此代码。

根据您的评论,我认为您正在使用jOOQ的代码生成器生成表。因此,您不需要尝试实例化
TableRecord
,而是使用生成的引用。要创建新记录,只需使用:

MyTableRecord record = DSL.using(configuration).newRecord(MY_TABLE);

这正如关于

的章节中所解释的,感谢您的简要解释,现在让我试试您的解决方案,我不能做+1,因为声誉不高,对此表示抱歉。这里还有一个问题,我必须得到列和名称的不同值。我正在做的使方法更通用的方法看起来不错,或者我做错了什么,请给我一些建议?@Hariom-我不能理解你的第一个问题,请更精确地解释。我们从这个“Table Table=record.getTable()”中得到了表对象; ' 现在我们可以得到columnName或fieldName,我也需要该字段的值,这样我就可以将这些值设置为另一个classif,如果我们在做“列表记录”,从我的理解来看,它被任何表广泛使用,很抱歉在这里使用泛型词。相关问题:您是否使用jOOQ的代码生成器?是的,我是jOOQ的新手,表由也许我不能清楚地理解如何创建我的泛型方法,以便我可以将任何列表表对象传递给它,并通过上面的代码获取columnName和数据?你的方法有什么问题?你想要一个记录列表还是一个表列表?当我将表列表传递给我的方法时,我将使用它进行迭代,获取tableName、columnname和该列的值或数据,我必须使用get/set方法将这些值设置为另一个数据bean类,这是我自己的类,这就是为什么我要写这个方法,这样我就可以将任何JOOQ创建的表类传递给它,我的方法将创建对象MyClass类型的列表。我担心,但这个解释并没有真正帮助我理解您的问题……如果您看到我的代码,您可以检查我将“TableRecord”列表作为参数,所以这个“列表”可以接受任何DB table JOOQ类,比如Login.java、Record.java等,所以这个方法是通用的。现在我有了'List'对象,现在我必须得到columnName或fieldName,以便我可以将它们设置为另一个bean类,该类将与UI交互。
MyTableRecord record = DSL.using(configuration).newRecord(MY_TABLE);