我有一个基于Korma的软件堆栈,可以针对MySQL数据库构建相当复杂的查询。我注意到,当我查询datetime列时,我从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。有人看过这个,并有关于如何解决它的想法?
答案 0 :(得分:0)
在类似的情况下移动到最新的jdbc改变了我们的其他几件事,并且是一个明确的"非平凡的"任务。我建议很快离开korma前叉然后再调试一下。
对于我们来说,更改集中在korma在更新调用上返回的内容在支持jdbc的版本之间发生了变化。尽管这是一个中等痛苦的过程,但值得获得最新信息。
获取jdbc的最新信息将为您带来全新的问题! 祝你好运:-)这些东西往往对你正在使用的数据库服务器非常具体。
其他选项是让远程策略指定order-by参数或构建库以将字符串强制转换为日期。这些都有一些长期的技术部门问题。