有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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


共 (1) 个答案

  1. # 1 楼答案

    事实证明,使用库并没有直接的方法来实现这一点。我自己的解决办法是:

    (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))))