根据MySQL JDBC 驱动程序的发行说明,当且仅当使用具有并发只读、只进结果和精确整数/MIN_VALUE 的获取大小的连接时,它才应该流式传输结果。
但是,当我尝试准确地生成这些条件(反对[mysql/mysql-connector-java "5.1.21"]
)时,我的 SQL 查询仍然会永远运行(或者,更确切地说,直到它耗尽 JVM 的内存并开始繁荣)。
(let [query (query-only (fetch-all big-table))]
(clojure.java.jdbc/with-connection (get-connection (:db query))
(clojure.java.jdbc/with-query-results rows
(into [{:fetch-size Integer/MIN_VALUE
:concurrency :read-only
:result-type :forward-only} (:sql-str query)]
(:params query))
(throw (Exception. (str "retrieved a row: " (pr-str (first rows)))))))))