2009-09-26 1 views
4
(ns db-example 
    (:use [clojure.contrib.sql :only (with-connection with-query-results)]) 
    (:import (java.sql DriverManager))) 

;; need this to load the sqlite3 driver (as a side effect of evaluating the expression) 
(Class/forName "org.sqlite.JDBC") 

(def +db-path+ "...") 
(def +db-specs+ {:classname "org.sqlite.JDBC", 
       :subprotocol "sqlite", 
       :subname  +db-path+}) 

(def +transactions-query+ "select * from my_table") 

(with-connection +db-specs+ 
    (with-query-results results [+transactions-query+] 
    ;; results is an array of column_name -> value maps 
    )) 
+6

코드에 문제가 있습니까? –

답변

11

with-query-results 매크로에서 실제로 반환해야합니다. results에 결합 서열이 게으른이기 때문에, 현실을 소비하자가 아닌 SQLite는 JDBC 어댑터에 연결 clojure.contrib.sql를 사용하는 경우

(with-connection +db-specs+ 
    (with-query-results results [+transactions-query+] 
    (doall results))) 

이 일반적인 패턴이다.

Btw (Class/forName driver-class-str)을 수동으로 수행 할 필요가 없었습니다. 이는 분명 Java 습관입니다. 드라이버는 contrib.sql의 어딘가에로드됩니다.