SQL查询验证器

4

是否存在前端或其他语言中的SQL查询验证器,以在执行数据库之前验证查询语法? 在我的当前项目中,在进入后端之前必须在Flex中验证SQL查询,因为它必须通过许多层才能到达数据库,而且访问数据库并返回异常是一个非常昂贵的过程。 因此,我需要前端SQL查询验证器来至少确认它是有效的查询。


有没有特定的数据库想法?在一个数据库中有效的 SQL 语句可能在另一个数据库中无效。 - Oded
不,我们必须支持所有的数据库。 - Bhaswanth
你的SQL是静态的(或参数有限),还是动态的?如果是静态的,你可以在项目开发期间进行评估(我想这应该没问题吧?)。如果是动态的,你需要在应用程序内部安装一个插件,在将其发送到(可能)多种类型的数据库之前进行验证。这听起来像是一个相当不平衡的解决方案。 - Tobiasopdenbrouw
它是动态的。但不会太复杂,只有带有where子句和连接的选择查询。就这些。 - Bhaswanth
2个回答

2
你可以获取SQL BNF语法,并使用解析器生成器验证输入。
我确信你需要调整标准语法,这并不容易。同时,我相信你可以找到更好的解决方案,但希望上述内容能对你有所帮助。

1

关于运行时的SQL解析,您可以查看: SQL4J是一个用Java编写的SQL解析器。 http://www.cs.toronto.edu/~jglu/sql4j/index.htm

http://jsqlparser.sourceforge.net/

或许你可以使用Antlr,它有许多SQL语法。 http://www.antlr.org/grammar/list

或者像建议的那样,使用开源SQL工具的解析器,如SQuirreL SQL Client。 http://squirrel-sql.sourceforge.net/

或者使用开源纯Java DBMS的部分功能,如SmallSQL。 http://www.smallsql.de/

还有Eclipse IDE插件用于从IDE验证SQL。

请查看: http://www.eclipse.org/datatools/


但是我只能通过用户干预来验证它们。我的要求是,我将使用用户的帮助从 Flex 生成查询,通过单击按钮或某些操作。那个生成的查询应该通过一段代码在那里进行语法验证。 - Bhaswanth
@Bhaswanth,所以你是动态生成查询吗?难道不是一个查询,而是将用户选择的条件或值传递给查询吗? - YoK
@YoK,据我所知他把它用作调试工具/异常处理程序。 - Unreason
@Yok:类似于条件的概念,但并不完全相同。让我们假设用户直接编写了一个查询,我需要在后端处理之前在前端对其进行验证。 - Bhaswanth
1
@Bhaswanth 我已经在我的回答中添加了一些解析器和验证器链接。希望这些能帮到你。 - YoK
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接