如何使用clojure的java.jdbc创建数据库?

走开

我希望能够为jdbc编写以下功能:

(def db {:classname "com.mysql.jdbc.Driver"
         :subprotocol "mysql"
         :subname "//127.0.0.1:3306/santacsv"
         :server "//127.0.0.1:3306"
         :schema "santa"
         :user "root"
         :password "root"})

(defn has-schema? [db & [schema]])

(defn create-schema [db & [schema]])

(defn drop-schema [db & [schema]])

我不确定该怎么做。任何帮助,将不胜感激

走开

我在这里实现了自己的:

https://github.com/zcaudate/manas/blob/master/src/manas/core.clj

    (defmacro run-statement [env database body catch-body & [statement]]
      `(do (Class/forName (:classname ~env))
           (let [~'conn (atom nil)]
             (try
               (reset! ~'conn (DriverManager/getConnection
                              (str "jdbc:" (:subprotocol ~env) ":"
                                   (:server ~env) "/" (or ~database (:database ~env)))
                              (:user ~env)
                              (:password ~env)))
               ~@(if statement
                   [(list 'let '[stmt (.createStatement @conn)]
                          (list '.executeUpdate 'stmt statement))])
               ~@body
               (catch SQLException ~'e
                 ~@catch-body)
               (finally
                 (if-not (nil? (deref ~'conn))
                   (.close (deref ~'conn))))))))

    (defn has-connection? [env & [url]]
      (let [env (if url (assoc env :server url) env)]
        (run-statement env "" (true) (false))))

    (defn all-databases [env]
      (run-statement env ""
                     ((let [rs (.getCatalogs (.getMetaData @conn))]
                        (loop [rs rs acc []]
                          (if (.next rs)
                            (recur rs (conj acc (.getString rs "TABLE_CAT")))
                            acc))))
                     ()))

    (defn has-database? [env & [schema]]
      (run-statement env schema (true) (false)))

    (defn create-database [env & [schema]]
      (run-statement env ""
                     (true)
                     (false)
                     (str "create database " (or schema (:database env)))))

    (defn drop-database [env & [schema]]
      (run-statement env ""
                     (true)
                     (false)
                     (str "drop database " (or schema (:database env)))))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Clojure中使用JDBC创建数据库?

来自分类Dev

使用JDBC从数据库中提取并创建数组

来自分类Dev

使用Spring JDBC创建多个数据库或架构

来自分类Dev

从sql命令行创建数据库并在Java jdbc代码中使用它

来自分类Dev

使用Java jdbc和Prepared语句创建数据库查询返回语法错误

来自分类Dev

在 Java 中使用 JDBC 创建数据库时,主要方法无法正常工作

来自分类Dev

如何使用JDBC在Spark的其他数据库中获取表的创建语句

来自分类Dev

Java JDBC数据库连接登录

来自分类Dev

JDBC如何更新数据库?

来自分类Dev

使用JDBC读取数据库

来自分类Dev

在调试期间检查或可视化使用sqlite jdbc创建的内存数据库

来自分类Dev

Spring Boot无法自动创建数据库(使用Jdbc + Mysql)

来自分类Dev

如何使用Liquibase创建数据库

来自分类Dev

如何使用续集创建数据库

来自分类Dev

如何使用续集创建数据库

来自分类Dev

如何使用数据库创建.jar?

来自分类Dev

如何使用Java创建Postgres数据库的备份

来自分类Dev

使用Java JDBC连接到MS SQL数据库

来自分类Dev

使用JDBC Java连接Oracle云数据库

来自分类Dev

如何使用JDBC工具访问hsqldb数据库?

来自分类Dev

python:如何使用jdbc连接到oracle数据库

来自分类Dev

如何使用Spring JDBC建立数据库连接?

来自分类Dev

如何使用 JDBC 从 List<Object>(嵌套)插入数据库

来自分类Dev

将数据插入数据库Java JDBC

来自分类Dev

使用jdbc将数据插入数据库

来自分类Dev

在MySQL数据库中使用JDBC更新数据

来自分类Dev

从Java在mysql中创建数据库

来自分类Dev

从Java在mysql中创建数据库

来自分类Dev

如何创建身份数据库

Related 相关文章

热门标签

归档