首页 > 解决方案 > How to run SQL Expression Query without any underlying database

问题描述

I have a situation where the user enters some validation input in SQL format. This SQL query is just using basic sql date functions but not using any databse column. Sample query:

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)

I am able to run this when i have a connection object configured to some real database. But i do not find it worth to use a database and manage it just for this purpose. Is there a way where i can execute these type of queries or queries like select date() from dual etc in my code.

标签: javamysqlsqldummy-dataquery-parser

解决方案


坦率地说,如果您要进行 SQL 数据库查询……通常最好有一个数据库来查询:)

此外,如果您的目的是“测试”您的查询......因为许多事情都是特定于数据库的 - 通常最好有一个您希望测试的实际数据库的实例。

话虽如此,在没有底层数据库的情况下执行 SQL 有很多选择:

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

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

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

真的有很多很多的选择。这一切都取决于您的特定“用例”;你真正想要完成的事情。

PS:

我给出了一些 Java 示例。这是一篇关于模拟 Microsoft/EF 数据调用的文章:

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


推荐阅读