java - clojure 中的 MySQL 枚举数据类型访问

标签 java mysql clojure enums

我正在尝试编写一个简单的应用程序,它读取数据库并生成一组用于访问它的函数;到目前为止,一切都很好。现在,我遇到的是我的数据库中的某些列被定义为 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/

相关文章:

csv - 将具有不同行宽的 CSV 导入 Incanter?

java - 构造函数可以像java中的方法一样返回数据类型吗?

java - 在 Spring Web 项目中使用 CSS 和 JS

clojure - 为什么 `(count nil)`返回0?

Mysql:在我的本地计算机上观察到插入和更新都非常慢

sql - 如何在 MySQL 数据库中显示多个值?

clojure - 在宏中正确处理符号解析

java - 如何向 Grizzly 服务器添加过滤器?

java - 如何在selenium java中通过断言验证动态表

php - 如何使用 PHP 在 MySQL 数据库中存储和检索嵌入的 YouTube?