如何在没有任何基础数据库的情况下运行SQL Expression Query

时间:2019-01-24 06:46:41

标签: java mysql sql dummy-data query-parser

我遇到一种情况,用户以S​​QL格式输入一些验证输入。 此SQL查询仅使用基本的SQL日期函数,而不使用任何databse列。 查询样例:

Select UNIX_TIMESTAMP(NOW()) < UNIX_TIMESTAMP(CASE WHEN DAYOFMONTH(NOW()) <= 10
THEN add_MONTHS(DATE_ADD(NOW(), (-1*DAYOFMONTH(NOW()))+1),-1)
ELSE DATE_ADD(NOW(), (-1*DAYOFMONTH(NOW()))+1) END)

当我将连接对象配置为某个真实数据库时,我可以运行此程序。但是我发现没有必要为此目的使用数据库并对其进行管理。有没有一种方法可以执行这些类型的查询或在我的代码中从double等中执行select date()之类的查询。

2 个答案:

答案 0 :(得分:1)

坦率地说,如果您要进行SQL数据库查询...通常最好让数据库针对:)

此外,如果您的目的是“测试”您的查询……由于许多事情是特定于数据库的,通常最好有一个要测试的实际数据库的实例。

话虽如此,但在没有基础数据库的情况下执行SQL的方法有很多:

  • 您可以使用在线“小提琴”来测试SQL查询,例如SQLFiddle.com

  • 对于单元测试,您将使用模拟框架。例如,对于Java / JUnit,我将使用Mockito

  • 如果我正在测试Spring / Hibernate数据访问,那么我将使用内存中的轻量级H2数据库。

真的有很多选择。这一切都取决于您的特定“用例”。您实际上要完成的任务。

PS:

我提供了许多Java示例。这是有关模拟Microsoft / EF数据调用的文章:

https://entityframework.net/how-to-mock-data

答案 1 :(得分:-1)

否,SQL查询需要针对数据库引擎运行。

例如,从double中选择date()是一个oracle查询;您不能针对mssql或mysql运行它。