我正在尝试编写一个简单的应用程序,它读取数据库并生成一组用于访问它的函数;到目前为止,一切都很好。现在,我遇到的是我的数据库中的某些列被定义为 MySQL 枚举类型(例如 ENUM('red','green','violet')
),我想验证我发送到数据库的东西,而不是在给出 Not Acceptable 值时从驱动程序收到错误,所以我想知道是否有办法从 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))))
关于java - clojure 中的 MySQL 枚举数据类型访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19322315/