Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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 如何使用JOOQ或任何其他库使用以下数据构建方言敏感的SQL查询?_Java_Relational Database_Query Builder_Querydsl_Jooq - Fatal编程技术网

Java 如何使用JOOQ或任何其他库使用以下数据构建方言敏感的SQL查询?

Java 如何使用JOOQ或任何其他库使用以下数据构建方言敏感的SQL查询?,java,relational-database,query-builder,querydsl,jooq,Java,Relational Database,Query Builder,Querydsl,Jooq,我有一个字符串列表,这些字符串将作为列作为sqlselect语句的一部分。以及表示要在SQL查询中联接的表的另一个字符串列表 List<String> columns = Arrays.asList("sakila.actor.first_name", "sakila.city.city", "sakila.category.category_id"); List<String> tables = Arrays.asList("actor", "film_

我有一个字符串列表,这些字符串将作为列作为
sqlselect
语句的一部分。以及表示要在
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");
List columns=Arrays.asList(“sakila.actor.first_name”,“sakila.city.city”,
“sakila.category.category_id”);
列表表=数组。asList(“演员”、“电影演员”、“电影”、“存货”、“商店”,
“地址”、“城市”、“国家”、“电影类别”、“类别”);
连接条件用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的自定义联接对象列表

在这些列表的帮助下,我创建了SQL select语句。但是查询在某些情况下与MySQL不兼容,在另一种情况下与Postgres不兼容。我想支持所有的数据库。如何使用带有此类列表(主要是字符串)的JOOQ构建此类查询?或者事实上还有其他好的图书馆吗?我只对表示SQL的字符串感兴趣,不必立即执行它


我试图使用
JOOQ
,但似乎我需要了解一下它的API。任何关于我的用例的例子都会有很大的帮助。谢谢。

任何答案在很大程度上取决于您所说的“查询在某些情况下与MySQL不兼容,在另一种情况下与Postgres不兼容”的意思。除非您使用特定于数据库的功能,否则jOOQ构建的大多数查询都可以在不同的数据库中正常运行。幸运的是,通过您的简单示例,您没有这样做

直接回答您的问题:您可以轻松地将XML“打开”条件转换为包含可用数据的条件对象。在jOOQ的API中,它看起来像(假设您有一个名为
create
)的DSLContext对象):

您也可以使用查询语法,这可能更适合您的动态查询:

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('.')));
列表
List<Field<?>> fieldColumns = new ArrayList();
for (String column : columns) fieldColumns.add(fieldByName(column.split('.')));