我有一个字符串列表,这些字符串将作为列作为SQL Select语句的一部分。以及另一个字符串列表,这些字符串表示要在SQL查询中联接的表。
List<String> columns = Arrays.asList("sakila.actor.first_name", "sakila.city.city",
"sakila.category.category_id");
List<String> tables = Arrays.asList("actor", "film_actor", "film", "inventory", "store",
"address", "city", "country", "film_category", "category");
连接条件用XML表示,如下所示。
<join type="inner" operator="=">
<!-- type can be right or left or full also -->
<left table="rental" column="staff_id"/>
<right table="staff" column="staff_id"/>
</join>
我已经解组了XML,并且我有代表上述XML的自定义Join对象列表。
在这些列表的帮助下,我创建了SQL select语句。但在某些情况下,该查询与MySQL和Postgres不兼容。我想支持所有数据库。如何使用JOOQ和这种列表(主要是字符串)构建这样的查询?或者事实上还有其他好的图书馆吗?我只对表示SQL的字符串感兴趣,我不必立即执行它。
我试图使用JOOQ
,但似乎我需要了解一下它的API。我用例的任何示例也将是一个很大的帮助。谢谢。
任何答案在很大程度上取决于你所说的“查询在某些情况下与MySQL不兼容,在另一种情况下与Postgres不兼容”。除非您使用特定于数据库的功能,否则jOOQ构建的大多数查询都可以在不同的数据库中正常运行。幸运的是,举个简单的例子,你没有这么做。
直接回答您的问题:您可以使用可用的数据轻松地将您的XML“ON”条件转换为条件对象。在jOOQ的API中,它看起来像(假设您有一个名为create
的DSLContext对象):
Condition joinCondition = fieldByName(leftTable, leftColumn).eq(fieldByName(rightTable, rightColumn));
create.select(columns)
.from(tableByName(leftTable))
.join(tableByName(rightTable))
.on(joinCondition)
.fetch();
您也可以使用查询语法,这可能更适合您的动态查询:
SelectQuery selectQuery = create.selectQuery();
selectQuery.addSelect(selectFields);
selectQuery.addFrom(leftTable);
selectQuery.addJoin(rightTable, joinCondition);
您需要迭代列数组并使用此API将它们转换为字段。这可能看起来像:
List<Field<?>> fieldColumns = new ArrayList();
for (String column : columns) fieldColumns.add(fieldByName(column.split('.')));
祝你好运!jOOQ太棒了。
问题内容: 我可以将H2,HSQLDB或任何其他嵌入式数据库与文件而不是文件中的数据库一起使用吗? 我打算在Android 上使用,它可以返回随机访问模式。 问题答案: H2支持可插入文件系统,该系统允许您访问zip或jar文件中的只读数据库。但是,当前没有文件系统实现。实施起来应该相对容易。最好的起点可能是FileSystemZip和FileObjectZip。
问题内容: 我想返回此表中的所有内容+一列,该列表示是否在其他任何地方将记录作为外键引用。 IE: 我要退货: “引用”是指是否在数据库的任何其他表中将特定的Animal_Id作为外键引用了。我想我首先可以查询information_schema并找出哪些表包含此外键,然后使用循环和动态sql执行 有人有摘录该怎么做吗? 问题答案: 这应该做到这一点: 如果您不了解所有FK表,则可以使用系统元数据
问题内容: 读完Hibernate之后:hbm2ddl.auto=正在生产中更新吗?出现了一些问题。首先,我使用Hibernate的原因是要与数据库供应商无关(无需编写10个版本的“相同” sql查询,例如tsql vs. sql)。 我的问题是在创建数据库架构(生产环境)时出现的。据我所知,我有两种选择。 hbm2dll =更新 纯sql(ddl)脚本。 在上面的主题中广泛讨论了第一种选择。第二
我已经浏览了Python文档提供的信息,但我仍然有点困惑。有人可以发布示例代码来编写一个新文件,然后使用pickle将字典转储到其中吗?
问题内容: 新手提出的另一个问题。我有一个php变量,用于查询数据库的值。它存储在变量$ publish中,当用户单击超链接时,它的值(在数据库中)将更改。 后台发生的事情是我正在查询数据库表中存储在$ publish变量中的某些数据。如果$ publish为空,则会在弹出窗口中添加publish.html的链接。弹出窗口将处理一个表单,并将数据添加到数据库,这意味着$ publish不再为空。我
背景和问题 我们使用包含元数据的文件来描述存储在csv文件中的数据。元数据文件包含最初从中导出数据的表的结构。我们使用jooq(pro版本)为临时表生成create语句,其中加载了csv文件中的数据。生成的ddl随后由pl/sql包执行。 这通常可以正常工作,但oracle原始字段存在问题。我不知道如何创建包含oracle RAW的表,因为SQLDataType不包含RAW。 简化的可运行示例 这