Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HSQLDB:count(*)返回一个小数_Java_Sql_Jpa_Db2_Hsqldb - Fatal编程技术网

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

Java HSQLDB:count(*)返回一个小数,java,sql,jpa,db2,hsqldb,Java,Sql,Jpa,Db2,Hsqldb,我在内存中使用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。 它在

我在内存中使用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在内存中时,它失败了,因为查询不返回整数或int,而是返回一个
BigDecimal
(转换失败)

使用HSQLDB2.3.0。 它在1.8版本的hsqldb中工作得很好

你知道为什么会出现这个问题吗?如何使
计数(*)
返回整数

我想,尽可能让生产代码保持不变。因为我已经知道我可以通过sql强制转换解决这个问题,但在我看来这并不理想:

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

您可以将Java代码更改为独立于平台。将返回值强制转换为Number,并使用getLong()而不是比较整数

HSQLDB实际上返回一个长十进制,而不是一个大十进制