java - 如何在没有任何底层数据库的情况下运行 SQL 表达式查询

标签 java mysql sql dummy-data query-parser

我遇到过这样的情况:用户以 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 数据调用的文章:

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

关于java - 如何在没有任何底层数据库的情况下运行 SQL 表达式查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54340790/

相关文章:

mysql - 新手: How to do update with id in cakephp2 mysql?

mysql - 跟踪对 drupal 实体的更改

php - Mysql IN子句,php数组

java - 尝试在 Java 应用程序中执行更多 MySql 查询时出现错误 S1000

java - 相当于 Java MessageDigest MD5 的 PHP

java - java中取用户输入的单词的第一个字母并重复添加到末尾

Java 客户端程序已成功连接到服务器,但未传递任何数据

java - 用于存储具有唯一 id 组合的对象的集合

mysql - Mysql中如何计算一行的中位数?

mysql - 蛋糕PHP : populating 2 fields with the same foreign key and write to database