2013-03-21 45 views
3

這裏是我的代碼:錯誤Clojure中java.lang.Exception的:事務回滾:d = clojure.lang.Keyword(NO_SOURCE_FILE:0)

(defn tbl_email_data 
    {:new-acc 1 
    :email "[email protected]" 
    :token "pa55P0rt"}) 

(defn create-online-test-data[data_values] 
    (with-connection 
     (with-transaction [] 
     ;Insert tbl_email 
     (execute-sql (format "Insert into tbl_email (email, acc_no, pass) values   ('%s', %d, '%s')" data_values :email data_values :new-acc data_values :token)) 
))) 

當試圖運行它,我得到的以下錯誤:

com.mode.test.core.testOnline=> (create-online-test-data tbl_email_data)
java.lang.Exception: transaction rolled back: d != clojure.lang.Keyword (NO_SOURCE_FILE:0)

+0

您正在使用什麼庫? – noahlz 2013-03-21 15:34:37

回答

1

您致電format並沒有做你認爲它正在做的事情。您將地圖和關鍵字作爲參數傳遞,這將導致format將地圖的字符串表示形式插入到SQL字符串中(並忽略最後三個參數)。

試試這個:

(format "Insert into tbl_email (email, acc_no, pass) values 
     ('%s', %d, '%s')" 
     (data_values :email) 
     (data_values :new-acc) 
     (data_values :token)) 

或者多一點地道:

(apply format 
     "Insert into tbl_email (email, acc_no, pass) values 
     ('%s', %d, '%s')" 
     (map data_values [:email :new-acc :token])) 
+0

Thanx。這很酷!!! – user2194528 2013-03-25 09:36:46