我想从clojure.java.jdbc创建/删除一个数据库。这将失败:
(require '[clojure.java.jdbc :as sql])
(def db
{:classname "org.postgresql.Driver"
:subprotocol "postgresql"
:subname "//localhost/postgres"
:user "postgres"})
(defn drop-database [name]
(sql/do-commands (str "drop database " name)))
(sql/with-connection db
(drop-database "db_name"))因为do命令启动了一个事务,显然你不能在一个事务中删除或创建数据库。有什么想法吗?
谢谢!
发布于 2011-10-20 17:31:24
获取do-commands (here)的源代码并删除对transaction的调用
(defn drop-database [name]
(sql/with-connection db
(with-open [s (.createStatement (sql/connection))]
(.addBatch s (str "drop database " name))
(seq (.executeBatch s)))))发布于 2016-06-13 01:23:58
无事务执行功能被整合到db-do-commands中。
现在这个稍微简单一点的版本开始工作了:
(jdbc/db-do-commands postgres-db false "CREATE DATABASE foo")如果不指定false作为第二个参数,它将无法工作,因为它将尝试启动一个事务。
发布于 2015-06-19 19:41:47
对于更新的clojure版本,建议的方法不再有效。我成功地使用了这个函数:
(defn exec-db-command [db command]
(jdbc/with-db-connection [conn db]
(with-open [s (.createStatement (:connection conn))]
(.executeUpdate s command))))
(exec-db-command db "create database foo")https://stackoverflow.com/questions/7832968
复制相似问题