Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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
有没有验证SQL语法的Java库?_Java_Sql_Syntax - Fatal编程技术网

有没有验证SQL语法的Java库?

有没有验证SQL语法的Java库?,java,sql,syntax,Java,Sql,Syntax,我不确定这是否存在,所以我想我应该借鉴别人的智慧 我想知道是否有任何Java库可以用来验证SQL查询的语法。我知道与常见的SQL规范有很多不同之处,所以它可能只适用于SQL:2006之类的东西,但这当然足够了 我的目标是将其用于单元测试目的,而无需尝试对DB执行。我知道它的用途有限,但它仍然有用 谢谢 我认为没有这样的图书馆。SQL语法的派生词太多 一个可能的解决方案是使用开源纯Java DBMS的一部分,如。在此项目中,可以创建的实例。所需的连接引用可以很容易地删除。您可以从中提取解析代码,这

我不确定这是否存在,所以我想我应该借鉴别人的智慧

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

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


谢谢

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


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

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

也许您可以使用Antlr,它有许多和,以及用于各种java IDE的插件

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

是一个完全用Java实现的开源SQL数据库,可在下获得。它以前被称为

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

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

在SQL中,使用“美化”等查询将永远不会出错。Java编译器会处理这个问题。

可以。支持的数据库:Oracle、DB2、MySQL、SQL Server、Teradata和PostgreSQL。

您需要验证特定供应商的SQL还是标准ANSI SQL?所有主要的SQL DBMS供应商都在同一时间扩展和未充分实现了标准,这大大背离了标准。这个问题怎么会没有建设性呢???@awied您有没有找到一个很好的解决方案?这是很久以前的事了,所以我不确定,但如果我没记错的话,我认为我没有找到任何满足我需要的方法。抱歉。您是SmallSQL开发人员吗?是的,我是开发人员之一。@Horcrux7:我刚刚下载了SmallSQL。删除SSConnection引用看起来并不容易。SQLParser似乎通过检查实际的数据库模式来验证SQL语法。(例如,SQLParser.from()方法尝试连接到数据库)。如果您无法删除该尊重,则可以用自己的实现替换它。您想要解析的语法还必须有一个名称模式。如果您仅将JOOQ用作查询生成器-是否有任何JOOQ机制来验证生成的SQL(例如在Junit测试中)?@Hovanesyan我相信没有必要验证它们,因为JOOQ发出有效的SQL。JOOQ允许您自己编写SQL语句,因此,如果缺少逗号、括号或smth,SQL将无效。如果您使用生成的模型类,JOOQ会发出有效的SQL—我只是将其用作SQL生成器,而不依赖于模型生成—因此可能会生成无效的SQL。@hovanessyan True。我认为您可以尝试准备查询以测试其有效性。它需要活动的数据库连接,但我认为如果查询准备好了,您可以99.9%确保它的语法正确。很好的工具,但不是免费的。我认为这一个移动到github: