Java 在SQL Server中使用JooQ时,getTables()方法返回所有数据库中的所有表;s在服务器上
当使用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做些不同的事情 以下是感兴趣时使用的方法: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
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();
}