【问题标题】:Clojure.java.jdbc return type for datetime changes based on query structure基于查询结构的日期时间更改的 Clojure.java.jdbc 返回类型
【发布时间】:2017-03-30 23:21:12
【问题描述】:

我有一个基于 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 的一个分支,它使用的是旧 (0.3.7) 版本的 clojure.java.jdbc。我不知道罪魁祸首是clojure.java.jdbcjava.jdbc 还是MySQL。任何人都看到了这个并且对如何解决它有想法?

【问题讨论】:

    标签: java mysql jdbc clojure


    【解决方案1】:

    在类似的情况下迁移到最新的 jdbc 为我们改变了其他几件事,这无疑是一项“非平凡”的任务。我建议尽快离开 korma fork,然后调试它。

    对我们来说,这些变化集中在更新调用中 korma 返回的内容在支持 jdbc 的版本之间发生了变化。尽管这是一个适度痛苦的过程,但还是值得接受最新的。

    了解最新的 jdbc 会给您带来新的问题! 祝你好运 :-) 这些东西往往是特定于您正在使用的数据库服务器的。

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

    【讨论】:

    • 谢谢。我们在clojure.java.jdbc 方面有点受限。我们将tern 构建到我们的一个应用程序中,以便我们可以在生产部署中进行模式迁移。我想我记得考虑过一个将 tern 更新为更新的 jdbc 的项目,因为由于 jdbc 的限制,tern 无法进行一些更新。但很快就清楚,这比我所能证明的要付出更多的努力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 2020-02-11
    相关资源
    最近更新 更多