HSQLDB:count(*) 返回一个小数

Posted

技术标签:

【中文标题】HSQLDB:count(*) 返回一个小数【英文标题】:HSQLDB: count(*) returns a decimal 【发布时间】:2013-10-18 12:37:27 【问题描述】:

我在内存中使用 hsqldb 来执行 JUnit 测试,测试数据访问对象。

在 DAO 中,我使用 JPA 实体管理器启动以下原生 SQL 查询:

SELECT COUNT(*) FROM AAA

代码如下所示:

final Query query = entityManager.createNativeQuery("SELECT COUNT(*) FROM AAA");
return (Integer) query.getSingleResult() == 0;

return 语句让我检查我的计数是否等于 0。 它在生产环境中运行良好(使用 DB2)。

但是在我们的测试环境中,hsqldb 在内存中,它失败了,因为查询不返回整数或整数,而是返回BigDecimal(转换失败)。

使用 HsqlDB 2.3.0。 之前使用 1.8 版本的 hsqldb 运行良好。

你知道为什么会出现这个问题吗?我怎样才能让count(*) 返回一个整数?

我希望尽可能让生产代码保持不变。因为我已经知道我可以用 sql cast 来解决这个问题,但在我看来这并不理想:

SELECT cast(COUNT(*) as int) FROM AAA

【问题讨论】:

【参考方案1】:

您可以将 Java 代码更改为与平台无关。将返回值转换为 Number 并使用 getLong() 而不是比较 Integer。

HSQLDB 实际上返回的是 Long,而不是 BigDecimal

【讨论】:

以上是关于HSQLDB:count(*) 返回一个小数的主要内容,如果未能解决你的问题,请参考以下文章

HSQLDB 2.3.3:如何为序列返回下一个值的数组

同时连接到 HSQLDB - 调用永远不会返回

HSQLDB 结果集 - 如何获取没有引号的 HSQLDB 返回空间作为空格且不为空?

获取 SQLException:当使用系统属性定义资源时,Driver:org.hsqldb.jdbcDriver 为 tomee 中的 URL 返回 null

测试通过 Mule JDBC 传输到嵌入式 HSQLDB 的插入,后续查询不返回任何结果

12内建函数