Clojure.java.jdbc基于查询结构返回日期时间更改的类型

时间:2017-03-30 23:21:13

标签: java mysql jdbc clojure

我有一个基于Korma的软件堆栈,可以针对MySQL数据库构建相当复杂的查询。我注意到,当我查询datetime列时,我从Korma查询返回的类型会根据生成的SQL查询的语法而改变。我已将其追溯到clojure.java.jdbc / query的级别。如果查询的形式如下:

select modified from docs order by modified desc limit 10

然后我找回与:modifiedjava.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。有人看过这个,并有关于如何解决它的想法?

1 个答案:

答案 0 :(得分:0)

在类似的情况下移动到最新的jdbc改变了我们的其他几件事,并且是一个明确的"非平凡的"任务。我建议很快离开korma前叉然后再调试一下。

对于我们来说,更改集中在korma在更新调用上返回的内容在支持jdbc的版本之间发生了变化。尽管这是一个中等痛苦的过程,但值得获得最新信息。

获取jdbc的最新信息将为您带来全新的问题! 祝你好运:-)这些东西往往对你正在使用的数据库服务器非常具体。

其他选项是让远程策略指定order-by参数或构建库以将字符串强制转换为日期。这些都有一些长期的技术部门问题。