2013-02-27 81 views
3

我需要能够在clojure中使用多个SQL语句加载和执行一个文件。例如,可以说我有像语句的文件:是否可以使用clojure.java.jdbc从文件中加载SQL语句?

ALTER TABLE bla...; 
ALTER TABLE foo...; 
UPDATE bla SET ...; 
UPDATE foo SET ...; 
ALTER TABLE bla DROP...; 
ALTER TABLE foo DROP...; 

你得到idea--文件与被分号结束许多语句。

尝试使用do-commands当我目前得到以下错误:

PSQLException org.postgresql.util.PSQLException: Too many update results were returned. 
+0

两年后,我有同样的问题 - 使用yesql。我真的必须退出yesql才能做到这一点吗? – Terminus 2015-07-12 22:24:31

回答

4

我结束了解决这个问题的方法是,像这样:

(ns myns.db 
    (:require [clojure.java.jdbc :as sql]    
      [clojure.java.io :refer [resource]])) 

(defn db-conn [] ...) 

(defn exec-sql-file 
    [file] 
    (sql/with-connection (db-conn) 
    (sql/do-prepared 
     (slurp (resource file))))) 

... 

; from your lein project where src/sql/some-statements.sql is the file you want to load 
(exec-sql-file "sql/some-statements.sql") 

我很想听听如何其他人已经处理这个问题。有没有更好的办法?

相关问题