簡體   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