繁体   English   中英

Clojure中的MySQL枚举数据类型访问

[英]MySQL enum datatype access in clojure

我正在尝试编写一个简单的应用程序,该应用程序读取数据库并产生一组用于访问数据库的函数。 到现在为止还挺好。 现在,我遇到的是数据库中的某些列被定义为MySQL枚举类型(例如ENUM('red','green','violet') ),我想验证我发送给的内容当给出一个不可接受的值时,数据库而不是从驱动程序接收到错误,所以我想知道是否有一种方法可以从clojure中检索枚举的可能值。

我正在使用[clojure.java.jdbc "0.3.0-alpha5"][mysql/mysql-connector-java "5.1.25"] 为了获取表的元数据,我目前正在使用java.sql.DatabaseMetaData ,但是每次尝试.getPseudoColumns给我nil

事实证明,没有使用库执行此操作的直接方法。 我自己的解决方案是:

(defn- parse-enum
  "Parses an enum string and returns it's components"
  [enum-str]
  ; "enum('temp','active','canceled','deleted')"
  (map (comp keyword #(.replace % "'" ""))
       (-> enum-str
           (.replaceFirst "^[^\\(]+\\(([^\\)]+)\\)$" "$1")
           (.split "'?,'?"))))

(defn get-enum-value 
  "Returns the values for an enum in a table.column"
  [table column]
  (jdbc/with-connection db
    (jdbc/with-query-results rs
      [(str "show columns from " table " where field = ?") column]
      ((comp set parse-enum :type first) rs))))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM