我遇到过这样的情况:用户以 SQL 格式输入一些验证输入。 此 SQL 查询仅使用基本的 SQL 日期函数,但不使用任何数据库列。 示例查询:
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)
当我将连接对象配置到某个真实数据库时,我就可以运行它。但我认为仅仅为了这个目的使用数据库并管理它是不值得的。有没有一种方法可以在我的代码中执行这些类型的查询或查询,例如 select date() from Dual 等。
最佳答案
坦率地说,如果您要进行 SQL 数据库查询...通常最好有一个数据库来查询:)
此外,如果您的目的是“测试”您的查询……因为许多事情都是特定于数据库的 - 通常最好拥有您希望测试的实际数据库的实例。
话虽如此,有很多选项可以在没有底层数据库的情况下执行 SQL:
您可以使用在线“fiddle”来测试 SQL 查询,例如 SQLFiddle.com
对于单元测试,您可以使用模拟框架。例如,对于 Java/JUnit,我会使用 Mockito .
如果我正在测试 Spring/Hibernate 数据访问,我会使用内存中的轻量级 H2数据库。
确实有很多很多的选择。这一切都取决于您特定的“用例”;您实际上想要实现的目标。
附注:
我给出了一些Java例子。这是一篇关于模拟 Microsoft/EF 数据调用的文章:
关于java - 如何在没有任何底层数据库的情况下运行 SQL 表达式查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54340790/