HSQL和MySQL的区别

Posted

技术标签:

【中文标题】HSQL和MySQL的区别【英文标题】:Difference in HSQL and MySQL 【发布时间】:2016-07-01 08:11:13 【问题描述】:

我使用 mysql 作为我的应用程序数据库,但使用 HSQL 作为测试内存数据库。现在的问题是我有一个 SQL selectQuery,如下所示:

SELECT date(a.created_at) as record_date 
FROM table a

现在,date() 是 MYSQL 中用于将 DateTime 转换为 Date 的函数,但在 HSQL 中,相同的函数是 to_date()。现在,我有一个方法可以将上述查询命中数据库并获取输出。

public Response dbQueryThroughJdbcTemplate(String selectQuery)
       jdbcTemplate.query(selectQuery, RowMapper); //RowMapper maps output to Response  
    

现在,我有一个测试方法来测试这个方法,

@Test
public void testDbQueryThroughJdbcTemplate()
       Response response = dbQueryThroughJdbcTemplate(selectQuery);
       TestCase.assertEquals(expected, response); // avoided the code for making expected object

现在,由于测试环境使用的是HSQL db,测试会抛出date方法不可用的错误。

如何解决这个问题,或者有什么更好的方法来解决这个问题?

【问题讨论】:

测试什么? HSQL 工作,你不需要测试它。测试你得到正确的结果,这与所使用的查询机制无关。如果问题是您需要完全更改查询:您不应该这样做。要么使用 MySQL,要么模拟数据库调用。 @Gimby,更新了问题以使其更清晰 正如我所说,您正在测试错误的东西。 MySQL 的 date 函数和 HSQL 的 date 函数可以工作,你不需要测试。您应该测试的是您的应用程序如何响应查询的结果,这允许您通过模拟数据库将其从测试中移除。 【参考方案1】:

您可以尝试 HSQLDB 和 MySQL 都支持的替代方法

SELECT CAST(a.created_at AS DATE) as record_date FROM table a

【讨论】:

以上是关于HSQL和MySQL的区别的主要内容,如果未能解决你的问题,请参考以下文章

mysql的hsql休眠方言

finedb(内置的HSQL数据库)迁移数据到MySQL

兼容 Postgres、MySQL、HSQL 的字节数组类型

[转帖]hive与hbase的联系与区别:

是否有必要在hibernate中安装HSQL而不是MYSQL作为DATABASE?

请问下mysql和oracle的区别?