gpt4 book ai didi

mysql - 如何最好地从 Java/JDBC 中的 SQL 查询中检索 SELECT COUNT(*) 的结果 - Long?大整数?

转载 作者:行者123 更新时间:2023-11-29 00:46:45 30 4
gpt4 key购买 nike

我使用的是 Hibernate,但执行的是一个简单的 SQLQuery,所以我认为这归结为一个基本的 JDBC 问题。我的生产应用程序在 MySQL 上运行,但我的测试用例使用内存中的 HSQLDB。我发现 SELECT COUNT 操作从 MySQL 返回 BigInteger,但从 HSQLDB 返回 Long。

MySQL 5.5.22HSQLDB 2.2.5

我想出的代码是:

SQLQuery tq = session.createSQLQuery(
"SELECT COUNT(*) AS count FROM calendar_month WHERE date = :date");
tq.setDate("date", eachDate);
Object countobj = tq.list().get(0);
int count = (countobj instanceof BigInteger) ?
((BigInteger)countobj).intValue() : ((Long)countobj).intValue();

这个返回类型的问题否定了其他 SO 问题的答案,例如 getting count(*) using createSQLQuery in hibernate?其中的建议是使用 setResultTransformer 将返回值映射到 bean 中。该 bean 的类型必须为 BigInteger 或 Long,如果类型不正确则失败。

我不愿意在 SQL 的“COUNT(*) AS 计数”部分使用强制转换运算符,因为担心数据库互操作性。我意识到我已经在使用 createSQLQuery 所以我已经超越了 Hibernates 尝试数据库中立性的界限,但是之前在数据库约束方面遇到了 MySQL 和 HSQLDB 之间的差异

有什么建议吗?

最佳答案

我不知道这个问题的明确解决方案,但我建议您使用 H2 database用于您的测试。

H2数据库有a feature您可以使用兼容模式连接到多个不同的数据库。

例如,要使用 MySQL 模式,您可以使用此 jdbc:h2:~/test;MODE=MySQL URL 连接到数据库。

关于mysql - 如何最好地从 Java/JDBC 中的 SQL 查询中检索 SELECT COUNT(*) 的结果 - Long?大整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10240901/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com