JOOQ Java 8 Schema是抽象的,无法实例化

时间:2016-04-27 01:13:32

标签: java sql java-8 jooq

在JOOQ中documentation它说我可以这样做:

try (Connection c = getConnection()) {
    String sql = "select schema_name, is_default " +
                 "from information_schema.schemata " +
                 "order by schema_name";

    DSL.using(c)
       .fetch(sql)

       // We can use lambda expressions to map jOOQ Records
       .map(rs -> new Schema(
           rs.getValue("SCHEMA_NAME", String.class),
           rs.getValue("IS_DEFAULT", boolean.class)
       ))

       // ... and then profit from the new Collection methods
       .forEach(System.out::println);
}

然而,当我这样做时,我得到错误" org.jooq.Schema是抽象的;无法实例化" - 如果你看documentation这是真的。

那么世界上的示例中的代码应该如何工作呢?

1 个答案:

答案 0 :(得分:3)

简短回答:他们没有在他们的示例中使用"org.jooq.Schema",而是使用静态内部类。

如果向下滚动the page you linked的底部,则会给出示例的github链接。您拥有的示例是SQL goodies

如果您打开SQLGoodies.java,您会注意到示例类顶部的静态内部类Schema

static class Schema {
    final String schemaName;
    final boolean isDefault;

    Schema(String schemaName, boolean isDefault) {
        this.schemaName = schemaName;
        this.isDefault = isDefault;
    }

    @Override
    public String toString() {
        return "Schema{" +
                "schemaName='" + schemaName + '\'' +
                ", isDefault=" + isDefault +
                '}';
    }
}

然后向下滚动,您将使用内部类找到您的示例:

 DSL.using(c)
     .fetch(sql)
     .map(r -> new Schema(
            r.getValue("SCHEMA_NAME", String.class),
            r.getValue("IS_DEFAULT", boolean.class)
     ))