Java 应用程序需要支持数据库 Oracle、DB2 和 MSS。一些涉及 sql 函数的查询的语法在不同的数据库中具有不同的语法。示例:oracle 中的 NULLIF() 可能不适用于 MSS。是否有任何开源 SQL 解析器可以将查询字符串解析并转换为 db 特定的 sql?
问问题
767 次
2 回答
1
jOOQ 有一个 SQL 解析器,可以完全满足您的需求。您可以在此处查看在线版本:https ://www.jooq.org/translate 。解析器也可以用作CLI或API。一个例子:
System.out.println(
DSL.using(SQLSERVER, new Settings()
.withParseDialect(ORACLE)
.withTransformTableListsToAnsiJoin(true))
.parser()
.parse("select nvl(a.z, 1) from a, b, c where a.x = b.x(+) and a.y = c.y")
);
这将打印:
select coalesce(A.Z, 1)
from A
join C
on A.Y = C.Y
left outer join B
on A.X = B.X;
jOOQ 是开源 RDBMS 的开源,并具有其他数据库产品的商业驱动程序。我知道您可能正在寻找一个全 OSS 库,我只能为您提供部分 OSS 库,也许其他人会发现这个迟到的答案很有用。
免责声明:我在 jOOQ 背后的公司工作。
于 2021-08-23T18:44:24.413 回答
0
@hd1 有一个正确的问题:你想要完成什么?因为如果您的目标不是解析 SQL,只需使用不同的 DB 来存储实体,例如支持JPQL(Java Persistence Query Language)的JPA(Java Persistence API)库,即与数据库无关(或应该是)。
链接:
于 2012-11-22T08:31:00.007 回答