(ns example (:use clojure.contrib.sql) (:use compojure)) ;; helpers for CRUD on db (defn crud-read [sql resfn args] (with-query-results rs [sql] ;; pass result to resfn (resfn rs))) (defn crud-add [sql resfn args] (resfn (insert-values ;; table name and fields (first sql) (last sql) ;; values to insert args))) (defn crud-delete [sql resfn args] (resfn (delete-rows ;; table name and condition (first sql) (last sql)))) (defn crud-update [sql resfn args] (println args " : " (last args)) (resfn (update-values ;; table name, condition (first sql) (last sql) ;; values to update with args))) ;; generic DB CRUD function (defn db-run [crudop sql resfn args] (let [db-host "localhost" db-port 3306 db-name "dcd"] (def db {:classname "com.mysql.jdbc.Driver" :subprotocol "mysql" :subname (str "//" db-host ":" db-port "/" db-name) :user "root" :password "root"}) (with-connection db ;; perform CRUD (crudop sql resfn args)))) ;; CRUD (defn get-all-books [] (db-run crud-read "SELECT * FROM books" format-book nil) ) (defn add-book [name author price] (db-run crud-add [:Books [:BOOK_NAME :BOOK_AUTHOR :BOOK_PRICE]] format-book [name author price] ) ) (defn delete-book [id] (db-run crud-delete [:Books ["BOOK_ID=?" id]] format-book nil) ) (defn update-book [id name author price] (db-run crud-update [:Books ["BOOK_ID=?" id]] format-book {:BOOK_NAME name :BOOK_AUTHOR author :BOOK_PRICE price} ) ) ;; output xml (defn format-book [res] (html [:books (map (fn [x] [:book x]) res)])) ;; configure compojure (defroutes webservice (GET "/get" [{:headers {"Content-Type" "text/xml"}} (get-all-books) ] ) (GET "/add" [{:headers {"Content-Type" "text/xml"}} (add-book (params :name) (params :author) (params :price) )] ) (GET "/delete" [{:headers {"Content-Type" "text/xml"}} (delete-book (params :id) )] ) (GET "/update" [{:headers {"Content-Type" "text/xml"}} (update-book (params :id) (params :name) (params :author) (params :price) )] ) ) ;; run integrated jetty (run-server {:port 8080} "/*" (servlet webservice)) ;; (def sample-db ;; ;; (let [db-host "localhost" ;; ;; db-port 3306 ;; ;; db-name "dcd"] ;; ;; (def db {:classname "com.mysql.jdbc.Driver" ;; ;; :subprotocol "mysql" ;; ;; :subname (str "//" db-host ":" db-port "/" db-name) ;; ;; :user "root" ;; ;; :password "root"}) ;; ;; (with-connection db ;; ;; (with-query-results rs ["select * from books"] ;; ;; ;(dorun (map #(println (:language :iso_code %)) rs))) ;; ;; (html [:books (map ;; ;; (fn [x] [:book x]) ;; ;; ;; ;; rs) ]) ;; ;; ) ;; ;; ) ;; ;; )) ;;