我有一个基于 Korma 的软件堆栈,它可以针对 MySQL 数据库构建相当复杂的查询。我注意到,当我查询日期时间列时,我从 Korma 查询返回的类型会根据生成的 SQL 查询的语法而变化。我已经将其追溯到 clojure.java.jdbc/query 级别。如果查询的形式是这样的:
select modified from docs order by modified desc limit 10
然后我得到对应于每个数据库行的映射,其中 :modified
是一个 java.sql.Timestamp
。然而,有时我们的查询生成器会生成更复杂的联合查询,这样我们就需要对联合的最终结果应用 order by ... limit ...
约束。 Korma 通过将查询括在括号中来做到这一点。即使只有一个子查询——即一个简单的带括号的选择——只要我们添加一个“外部”order by ...
,:modified
的类型变化。
(select modified from docs order by modified desc limit 10) order by modified desc
在这种情况下,clojure.java.jdbc/query
将 :modified
值作为字符串返回。我们的一些更高级别的代码没有预料到这一点,并获得异常。
我们使用的是 Korma 的一个分支,它使用的是 clojure.java.jdbc
的旧 (0.3.7) 版本。我不知道罪魁祸首是 clojure.java.jdbc
还是 java.jdbc
还是 MySQL。任何人看到这个并对如何解决它有想法?
最佳答案
在类似情况下迁移到最新的 jdbc 对我们来说改变了其他几件事,这绝对是一项“非常重要”的任务。我建议尽快摆脱 korma fork ,然后调试它。
对我们来说,变化集中在 korma 在更新调用中返回的内容在支持 jdbc 的版本之间发生了变化。尽管这是一个适度痛苦的过程,但获得最新信息是非常值得的。
最新的 jdbc 会给您带来新的问题! 祝你好运 :-) 这些东西往往是相当特定于你正在使用的数据库服务器。
您的其他选择是采用一种策略,即指定排序依据参数或构建库以将字符串强制转换为日期。这两者都有一些长期的技术部门问题。
关于java - Clojure.java.jdbc 根据查询结构更改日期时间的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43129932/