查询相应的数据库架构(Querying the appropriate database schem

2019-10-17 04:32发布

这是一个后续问题我前面关于使用jooq与H2互动在Java中指定多个图式问题。

我的测试H2 DB目前拥有2和图式,公共和INFORMATION_SCHEMA。 PUBLIC指定为通过H2默认模式。 当运行一个查询,应提取信息,例如从INFORMATION_SCHEMA.TABLES查询失败,出现“未知表” SQL错误。 我只能通过执行来执行这样的查询factory.use(INFORMATION_SCHEMA) 有没有生成错误等,并妥善日食例如自动填充TABLES.TABLE_NAME。

如果我不这样做,jooq似乎不预先考虑,即使我创造的模式如正确厂对象适当的模式

InformationSchemaFactory info = new InformationSchemaFactory(conn);

我读到的映射 ,但我有点困惑,哪些架构,我会作为输入/输出使用。

Answer 1:

缺省情况下, InformationSchemaFactory假定提供的连接实际上是连接到INFORMATION_SCHEMA 。 这就是为什么架构名称未在SQL渲染。 例:

// This query...
new InformationSchemaFactory(conn).selectFrom(INFORMATION_SCHEMA.TABLES).fetch();

// ... renders this SQL (with the asterisk expanded):
SELECT * FROM "TABLES";

上述行为应该在你的生成被记录InformationSchemaFactory的Javadoc。 为了在前面加上"TABLES""INFORMATION_SCHEMA" ,你有几种选择。

  1. 使用正规厂家代替,这是不依赖于任何架构:

     // This query... new Factory(H2, conn).selectFrom(INFORMATION_SCHEMA.TABLES).fetch(); // ... renders this SQL: SELECT * FROM "INFORMATION_SCHEMA"."TABLES"; 
  2. 使用另一种模式的工厂,如产生PublicFactory

     // This query... new PublicFactory(conn).selectFrom(INFORMATION_SCHEMA.TABLES).fetch(); // ... renders this SQL: SELECT * FROM "INFORMATION_SCHEMA"."TABLES"; 
  3. 使用设置和适当的模式映射到强制模式名被渲染。

第一个选项可能是最简单的一个。

在这里,这博客文章将为您讲述如何执行的查询登录到您的首选记录器输出的一些见解: http://blog.jooq.org/2011/10/20/debug-logging-sql-with-jooq/



文章来源: Querying the appropriate database schema