【问题标题】:Any Java libraries out there that validate SQL syntax? [closed]是否有任何验证 SQL 语法的 Java 库? [关闭]
【发布时间】:2010-09-13 13:54:13
【问题描述】:

我不确定这是否存在,所以我想我会挖掘其他人的智慧..

我想知道是否有任何 Java 库可用于验证 SQL 查询的语法。我知道与常见的 SQL 规范有很多偏差,所以它可能只适用于 SQL:2006 之类的东西,但这当然就足够了。

我的目标是将其用于单元测试目的,而无需尝试对数据库执行。我知道它的用途有限,但它仍然有用。

谢谢!

【问题讨论】:

  • 您需要验证特定供应商的 SQL 还是标准的 ANSI SQL?所有主要的 SQL DBMS 供应商都在扩展和实现标准时大大偏离了标准。
  • 这个问题怎么没有建设性??
  • @awied 你有没有找到一个好的解决方案?
  • 那是很久以前的事了,所以我不确定,但如果我没记错的话,我认为我没有找到任何满足我需求的东西。道歉。

标签: java sql syntax


【解决方案1】:

我认为没有这样的库。 SQL 语法有太多派生词。

一种可能的解决方案是使用部分开源纯 Java DBMS,例如 SmallSQL。在这个项目中,您可以创建SQLParser 的实例。可以很容易地删除所需的连接引用。

【讨论】:

  • 您是 SmallSQL 开发人员吗?
  • 是的,我是开发人员之一。
  • @Horcrux7:我刚刚下载了 SmallSQL。删除 SSConnection 引用看起来并不容易。似乎 SQLParser 通过检查实际的数据库模式来验证 SQL 语法。 (例如 SQLParser.from() 方法尝试连接到数据库)。
  • 如果您无法消除崇敬,那么您可以将其替换为自己的安慰剂实现。您要解析的语法也必须具有名称架构。
【解决方案2】:

您也许可以从HSQL 中提取解析代码,这是 java 和开源的。

【讨论】:

    【解决方案3】:

    也许你可以使用 Antlr,它有多个 SQL grammars 和一个 Java library,以及各种 Java IDE 的插件。

    或者按照建议,使用开源 SQL 实用程序的解析器,例如 SQuirreL SQL Client

    【讨论】:

      【解决方案4】:

      Apache Derby 是一个完全用 Java 实现的开源 SQL 数据库,可以在 Apache License, Version 2.0 下获得。它以前称为IBM Cloudscape

      您可以尝试重用来自org.apache.derby.impl.sql 的解析代码。

      【讨论】:

        【解决方案5】:

        试试JSQL parser

        除了验证之外,您还可以获得有意义的查询表示。
        例如,这允许您只接受“某些”命令;操纵
        查询,“美化”它等等。

        【讨论】:

        【解决方案6】:

        使用JOOQ,您将永远不会在 SQL 中出错。 Java 编译器会处理这个问题。

        【讨论】:

        • 如果您仅将 JOOQ 用作查询构建器 - 是否有任何 Jooq 机制来验证生成的 SQL(例如在 Junit 测试中)?
        • @hovanessyan 我相信不需要验证它们,因为 JOOQ 发出有效的 SQL。
        • JOOQ 允许您自己编写 SQL 语句,因此如果您遗漏了逗号或括号等,SQL 将无效。如果您使用生成的模型类,JOOQ 会发出有效的 SQL——我仅将它用作 SQL Builder,而不依赖于模型生成——因此可能会生成无效的 SQL。
        • @hovanessyan 是的。我认为您可以尝试准备查询以测试其有效性。它需要主动数据库连接,但我认为如果查询准备就绪,您可以 99.9% 确定它在语法上是正确的。
        【解决方案7】:

        General SQL Parser 可以做offline SQL syntax check。支持的数据库:Oracle、DB2、MySQL、SQL Server、Teradata 和 PostgreSQL。

        【讨论】:

        • 不错的工具,但不是免费的
        猜你喜欢
        • 1970-01-01
        • 2011-09-15
        • 2013-08-03
        • 1970-01-01
        • 2022-01-24
        • 2013-02-21
        • 2013-12-28
        • 2011-02-25
        • 1970-01-01
        相关资源
        最近更新 更多