Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 是否可以使用clojure.java.jdbc修补加载文件中的SQL语句?_Postgresql_Jdbc_Clojure - Fatal编程技术网

Postgresql 是否可以使用clojure.java.jdbc修补加载文件中的SQL语句?

Postgresql 是否可以使用clojure.java.jdbc修补加载文件中的SQL语句?,postgresql,jdbc,clojure,Postgresql,Jdbc,Clojure,我需要能够在clojure中加载和执行包含多个SQL语句的文件。例如,假设我有一个包含如下语句的文件: ALTER TABLE bla...; ALTER TABLE foo...; UPDATE bla SET ...; UPDATE foo SET ...; ALTER TABLE bla DROP...; ALTER TABLE foo DROP...; 你知道了——一个包含许多以分号结尾的语句的文件 在尝试使用do命令时,我当前遇到以下错误: PSQLException org.pos

我需要能够在clojure中加载和执行包含多个SQL语句的文件。例如,假设我有一个包含如下语句的文件:

ALTER TABLE bla...;
ALTER TABLE foo...;
UPDATE bla SET ...;
UPDATE foo SET ...;
ALTER TABLE bla DROP...;
ALTER TABLE foo DROP...;
你知道了——一个包含许多以分号结尾的语句的文件

在尝试使用
do命令时,我当前遇到以下错误:

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

我最终解决这个问题的方式是这样的:

(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")

我想听听其他人是如何处理这个问题的。有更好的方法吗?

我正在使用
[org.clojure/java.jdbc“0.7.9”]
。被接受的答案对我不起作用。这就是我取得同样成就的原因:

我的文件内容:

["insert into user (email , password, name, type) values ('carlos@myshoppingapp.com', 'password', 'Carlos Frank', 'admin')"
"insert into user (email , password, name, type) values ('alice@gmail.com', 'password', 'Alice Williams', 'customer')"
"insert into user (email , password, name, type) values ('piyush@gmail.com', 'password', 'Piyush Goyal', 'customer')"] 
请注意,整个文件内容都包含在一个向量中,并且每个sql都是双引号

读取此文件并填充DB的代码:

(defn exec-sql-file  
   [file]  
     (jdbc/db-do-commands db-spec  (read-string (slurp file))))

两年后,我遇到了同样的问题——使用yesql。要做到这一点,我真的必须退出yesql吗?