java - Clojure.java.jdbc 根据查询结构更改日期时间的返回类型

标签 java mysql jdbc clojure

我有一个基于 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/

相关文章:

java - Spring STS 挂起的原因可能是什么?

java - 为 MySQL 进行批处理时,JDBC 似乎不想调用 DELETEPreparedStatement

java - 通过 JDBC 连接获取 SQLite 用户版本

java - 在java反射中将Field.get()返回的Object转换为String[]

java - 如何从 Http 集成流创建 Spring Reactor Flux?

mysql - RESTful API 复杂查询

php - 当我将数据插入数据库时​​,显示错误列数与第 1 行的值计数不匹配

java - 如何将字节数组转换为 blob

Java : JDBC Connection Issue When Click On Button

java - 如何在 getActivity 变为 null 时终止线程