2013-09-23 60 views
3

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

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类的对象?这样我就可以调用上述方法并通过ListTableRecord对象。

我正在尝试一个通用的方法,它会得到TableRecord对象并返回数据库表名和该表的所有列的表。我必须使用TableRecord或其他任何对象,以及如何创建该对象?

我不能做这样的事情

TableRecord record = new TableRecord() 

,因为它已经是一个接口,那么如何创建对象?或者我必须通过另一个类来方法?

编辑: -

如果你会看到我的代码,你可以检查方法采取的TableRecordList作为参数,所以,这List可以采取任何数据库表JOOQ类像LoginRecord.javaEmpRecord.java等,所以方法不是通用的,它的开发者可以通过这个来传递任何类型的Jooq创建的表类对象。现在我有'List<TableRecord>'对象,现在我必须获取columnName或fieldName,它们的值是指这些字段包含的数据,以便我可以将数据设置为与UI交互的另一个Bean类。

+0

相关问题的章节解释说:http://stackoverflow.com/q/18914017/521799 –

+0

是否使用jOOQ的代码生成器? –

+0

是的,我是Jooq的新手和Jooq生成的表格 – Hariom

回答

2

在firt中你需要知道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>

方法参数

至于使用接口作为参数,你可以用它来每polimorphic电话实现TableRecord<R>的对象。在这种情况下,你可以把所有的记录放在这里。

List<TableRecord> records = new List<TableRecord>(); 
records.add(new AddressRecord()); 
records.add(new CityRecord()); 
records.add(new UserRecord()); 


编辑

这是一般代码?

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

+0

感谢您的简要解释,让我现在尝试您的解决方案,由于声誉较低,我无法做到+1。还有一个问题,我必须得到不同的列和名称的价值 – Hariom

+1

我正在做的方法更通用的方法看起来不错,或者我做错了什么,请告诉我呢? – Hariom

+0

@Hariom - 我不明白你的第一个问题,请更精确地解释它。 –

2

从你的意见我认为你使用jOOQ的代码生成器来生成表。因此,您不需要尝试实例化TableRecord,而是使用生成的引用。为了创造新的记录,只需使用:

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

这是DSLContext.newRecord(Table)using jOOQ for CRUD

+0

可能是我无法清楚地了解如何创建我的方法通用,以便我可以将任何List表对象传递给它,并通过上面的代码获取columnName和数据? – Hariom

+0

你的方法有什么问题?你想要一个记录列表还是一张表格列表? –

+0

当我将表列表传递给我的方法时,我将与它迭代获取该列的表名,列名和值或数据,并且我必须使用get/set方法将这些值设置为另一个数据bean类,这是我自己的类为什么我写这个方法,以便我可以将任何JOOQ创建的Table类传递给它,并且我的方法将创建对象MyClass类型的列表。 – Hariom