3

Java 应用程序需要支持数据库 Oracle、DB2 和 MSS。一些涉及 sql 函数的查询的语法在不同的数据库中具有不同的语法。示例:oracle 中的 NULLIF() 可能不适用于 MSS。是否有任何开源 SQL 解析器可以将查询字符串解析并转换为 db 特定的 sql?

4

2 回答 2

1

jOOQ 有一个 SQL 解析器,可以完全满足您的需求。您可以在此处查看在线版本:https ://www.jooq.org/translate 。解析器也可以用作CLIAPI。一个例子:

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 回答