如何在没有任何基础数据库的情况下运行 SQL 表达式查询

我有一种情况,用户以 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 等。


慕少森
浏览 107回答 2
2回答

GCT1015

坦率地说,如果您要进行 SQL 数据库查询……通常最好有一个数据库来查询:)此外,如果您的目的是“测试”您的查询......因为许多事情都是特定于数据库的 - 通常最好有一个您希望测试的实际数据库的实例。话虽如此,在没有底层数据库的情况下执行 SQL 有很多选择:您可以使用在线“fiddle”来测试 SQL 查询,例如SQLFiddle.com对于单元测试,您将使用模拟框架。例如,对于 Java/JUnit,我会使用Mockito。如果我正在测试 Spring/Hibernate 数据访问,我会使用内存中的轻量级H2数据库。真的有很多很多的选择。这一切都取决于您的特定“用例”;你真正想要完成的事情。PS:我给出了一些 Java 示例。这是一篇关于模拟 Microsoft/EF 数据调用的文章:https://entityframework.net/how-to-mock-data

繁花如伊

不,sql 查询需要针对数据库引擎运行。例如 select date() from dual 是一个 oracle 查询;你不能对 mssql 或 mysql 运行它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java