Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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 在SQL Server中使用JooQ时,getTables()方法返回所有数据库中的所有表;s在服务器上_Java_Sql Server_Jooq - Fatal编程技术网

Java 在SQL Server中使用JooQ时,getTables()方法返回所有数据库中的所有表;s在服务器上

Java 在SQL Server中使用JooQ时,getTables()方法返回所有数据库中的所有表;s在服务器上,java,sql-server,jooq,Java,Sql Server,Jooq,当使用Jooq中的DSLContext.meta().getTables()方法返回数据库上的表列表时,它在postgres和H2服务器上工作得非常好。但是,当对SQL Server数据库进行相同的调用时,它最终返回服务器上所有数据库上的每个表,而不仅仅是数据源数据库 在这个示例中,服务器上有2个db,DB1有2个表,DB2有3个表。如果我只想使用DSLContext.meta().getTables()返回DB1中的2个表,它会在postgres和H2上正确地返回这2个表,但是在SQL Ser

当使用Jooq中的DSLContext.meta().getTables()方法返回数据库上的表列表时,它在postgres和H2服务器上工作得非常好。但是,当对SQL Server数据库进行相同的调用时,它最终返回服务器上所有数据库上的每个表,而不仅仅是数据源数据库

在这个示例中,服务器上有2个db,DB1有2个表,DB2有3个表。如果我只想使用DSLContext.meta().getTables()返回DB1中的2个表,它会在postgres和H2上正确地返回这2个表,但是在SQL Server上,它使用相同的代码返回所有5个表,唯一的区别是数据源

在SQL Server中使用Jooq时,是否有方法仅返回特定数据库的表?行为是一个bug,还是故意的,我应该为SQLServerDBS做些不同的事情

以下是感兴趣时使用的方法:

private boolean isTableExists(String table_name){
        boolean isTable = false;
        List<Table<?>> tables = dsl.meta().getTables(); //this is the problem line, returning the wrong number of tables on SQL Server
        for (Table<?> table : tables){
            if (table.getName().equals(table_name)){
                isTable = true;
                break;
            }
        }
        return isTable;
    }
private boolean isTableExists(字符串表名称){
布尔isTable=false;

ListjOOQ的
DSLContext.meta()
API根据jOOQ 3.13为所有目录和所有模式生成表。因此,您必须添加一些逻辑来跳过不需要的数据库,例如:

private boolean isTableExists(字符串表名){
返回dsl.meta()
.getCatalogs()
.stream()
.filter(c->c.getName().equals(“数据库名”))
.flatMap(c->c.getSchemas().stream())
.filter(s->s.getName().equals(“schemaName”))
.flatMap(s->s.getTables().stream())
.anyMatch(t->t.getName().equals(tableName));
}
在JOOQ3.14(请参阅)中,将有额外的API在访问元信息之前过滤掉不需要的对象

private boolean isTableExists(字符串表名){
return!dsl.meta()
.filterCatalogs(c->c.getName().equals(“数据库名”))
.filterSchemas(s->s.getName().equals(“schemaName”))
.filterTables(t->t.getName().equals(tableName))
.getTables()
.isEmpty();
}

jOOQ的
DSLContext.meta()
API根据jOOQ 3.13为所有目录和所有模式生成表。因此,您必须添加一些逻辑来跳过不需要的数据库,例如:

private boolean isTableExists(字符串表名){
返回dsl.meta()
.getCatalogs()
.stream()
.filter(c->c.getName().equals(“数据库名”))
.flatMap(c->c.getSchemas().stream())
.filter(s->s.getName().equals(“schemaName”))
.flatMap(s->s.getTables().stream())
.anyMatch(t->t.getName().equals(tableName));
}
在JOOQ3.14(请参阅)中,将有额外的API在访问元信息之前过滤掉不需要的对象

private boolean isTableExists(字符串表名){
return!dsl.meta()
.filterCatalogs(c->c.getName().equals(“数据库名”))
.filterSchemas(s->s.getName().equals(“schemaName”))
.filterTables(t->t.getName().equals(tableName))
.getTables()
.isEmpty();
}