首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从clojure.java.jdbc删除或创建数据库?

如何从clojure.java.jdbc删除或创建数据库?
EN

Stack Overflow用户
提问于 2011-10-20 16:16:58
回答 4查看 2.2K关注 0票数 8

我想从clojure.java.jdbc创建/删除一个数据库。这将失败:

代码语言:javascript
复制
(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命令启动了一个事务,显然你不能在一个事务中删除或创建数据库。有什么想法吗?

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-20 17:31:24

获取do-commands (here)的源代码并删除对transaction的调用

代码语言:javascript
复制
(defn drop-database [name]
  (sql/with-connection db
    (with-open [s (.createStatement (sql/connection))]
      (.addBatch s (str "drop database " name))
      (seq (.executeBatch s)))))
票数 5
EN

Stack Overflow用户

发布于 2016-06-13 01:23:58

无事务执行功能被整合到db-do-commands中。

现在这个稍微简单一点的版本开始工作了:

代码语言:javascript
复制
(jdbc/db-do-commands postgres-db false "CREATE DATABASE foo")

如果不指定false作为第二个参数,它将无法工作,因为它将尝试启动一个事务。

票数 2
EN

Stack Overflow用户

发布于 2015-06-19 19:41:47

对于更新的clojure版本,建议的方法不再有效。我成功地使用了这个函数:

代码语言:javascript
复制
(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")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7832968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档