我遇到一种情况,用户以SQL格式输入一些验证输入。 此SQL查询仅使用基本的SQL日期函数,而不使用任何databse列。 查询样例:
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)
当我将连接对象配置为某个真实数据库时,我可以运行此程序。但是我发现没有必要为此目的使用数据库并对其进行管理。有没有一种方法可以执行这些类型的查询或在我的代码中从double等中执行select date()之类的查询。
答案 0 :(得分:1)
坦率地说,如果您要进行SQL数据库查询...通常最好让数据库针对:)
此外,如果您的目的是“测试”您的查询……由于许多事情是特定于数据库的,通常最好有一个要测试的实际数据库的实例。
话虽如此,但在没有基础数据库的情况下执行SQL的方法有很多:
您可以使用在线“小提琴”来测试SQL查询,例如SQLFiddle.com
对于单元测试,您将使用模拟框架。例如,对于Java / JUnit,我将使用Mockito。
如果我正在测试Spring / Hibernate数据访问,那么我将使用内存中的轻量级H2数据库。
真的有很多选择。这一切都取决于您的特定“用例”。您实际上要完成的任务。
PS:
我提供了许多Java示例。这是有关模拟Microsoft / EF数据调用的文章:
答案 1 :(得分:-1)
否,SQL查询需要针对数据库引擎运行。
例如,从double中选择date()是一个oracle查询;您不能针对mssql或mysql运行它。