java - 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.
解决方案
坦率地说,如果您要进行 SQL 数据库查询……通常最好有一个数据库来查询:)
此外,如果您的目的是“测试”您的查询......因为许多事情都是特定于数据库的 - 通常最好有一个您希望测试的实际数据库的实例。
话虽如此,在没有底层数据库的情况下执行 SQL 有很多选择:
您可以使用在线“fiddle”来测试 SQL 查询,例如SQLFiddle.com
对于单元测试,您将使用模拟框架。例如,对于 Java/JUnit,我会使用Mockito。
如果我正在测试 Spring/Hibernate 数据访问,我会使用内存中的轻量级H2数据库。
真的有很多很多的选择。这一切都取决于您的特定“用例”;你真正想要完成的事情。
PS:
我给出了一些 Java 示例。这是一篇关于模拟 Microsoft/EF 数据调用的文章:
推荐阅读
- reactjs - 在 React JS 中使用 SEO
- oracle-apex - Oracle APEX 5.1 隐藏交互式报表列
- node.js - 向 Amazon SNS 发送有关 AWS DMS 任务进度的通知
- java - 如何以编程方式将文件扩展名从 csv 更改为 xls?
- flutter - 在 Flutter 中动态生成小部件
- mysql - 仅选择具有所需角色的用户
- java - org.springframework.core.task.TaskRejectedException 同时监听 SQS 队列?
- xslt - XSLT 1.0 字符串长度 - 2
- php - 按列解析 PHP 中的 CSV 文件
- sql - 在 oracle 中连接具有相同列的两个查询的结果