2017-02-19 48 views
0

這是一個關於Clojure和從數據庫訪問信息的簡單問題。使用Clojure訪問數據庫

下面的代碼,裏面我的一個功能正在起作用:

(defn insertNewValue [] 
(let [newRank 
     (reduce + 1 
      (map :max 
      (db/query (env :database-url) ["select max(rank) from My_Table"]))) 
     ......... 

但在使用時減少,只有一個從數據庫中查詢得到的紀錄似乎並不很適合我。 因此,這裏是我的嘗試更換:

(defn insertNewValue [] 
(let [dbRecord (db/query (env :database-url) ["select max(rank) from My_Table"]) 
     newRank (+ 1 (:max dbRecord)) 
     ......... 

這似乎更清潔,但它不工作!

誰能告訴我我做錯了什麼?

回答

1

看來,dbRecord會返回一個列表(這就是爲什麼你可以map過它),但是,在你的第二次嘗試你是把它當作一個直接映射。由於保證您只有一條記錄(您正在查詢最大值),因此您可能需要做

(inc (:max (first dbRecord))) 
+0

這似乎很簡單。如果有效,那會很好。 – Michel

+0

是的,它的作品。謝謝! – Michel