2011-05-25 24 views
8

Clojure içindeki bir Postgres veritabanına erişmeye çalışıyorum. Ben AncakPostgreSQL/Clojure ile sürücü sorunu

(sql/with-connection db 
    (sql/with-query-results recs ["select * from asdf"] 
     (doseq [rec recs] 
      (println rec)))) 

: Sonra sonra böyle bir veritabanını erişmeye çalışıyorum

(def db 
    {:classname "org.postgresql.Driver" 
    :subprotocol "postgresql" 
    :subname "//localhost/testdb" 
    :username "postgres" 
    :password "postgres"}) 

: Böyle veritabanını kurma, DBS kullanan projelerin örneklerinden bir ton buldum 'Bu hatayı alıyorum:

No suitable driver found for jdbc:postgresql://localhost/testdb 
    [Thrown class java.sql.SQLException] 

sorunun :classname "org.postgresql.Driver" ile olduğunu varsayarak, ama ben çözüm ne olduğundan emin değilim. Bu sürücüyü vermem gerektiğini hayal ediyorum ama nereden alacağımı ya da nereye koyacağımı bilmiyorum. postgresql.org adresinden indirilebilecek bir indirme var - bunu indirmeli miyim? Yoksa proje ayarlarımda bir bağımlılık olarak indirmek için lein almak için koyabileceğim bir şey var mı? Bir kez var, nereye gidiyor?


Düzenleme (yanıtta @mtnygard için): benim project.clj içinde bu var:

(defproject hello-www "1.0.0-SNAPSHOT" 
    :dependencies [[org.clojure/clojure "1.2.1"] 
        [postgresql/postgresql "8.4-702.jdbc4"] 
        ...] 

Benim postgres sürüm 8.4:

[/media/data/dev/clojure/hello-www (postgres *)]$ postgres --version 
postgres (PostgreSQL) 8.4.8 
+0

project.clj dosyasına postgresql ekledikten sonra "lein deps" çalıştırdınız mı? – mtnygard

+0

Ayrıca, projenizin ana gövdesini nasıl yürütüyorsunuz? "lein deps", sadece kavanozları lib/koyar. Programınızı yapılandırılmış bir sınıf yolu ile çalıştırmanız gerekiyor. Örneğin, "lein run" ve "lein repl" her ikisi de sınıf yolunuzu kuracak. – mtnygard

+0

Sorunu bulamadınız! Lein deps 'i çalıştırmıştım, fakat REPL'imi güncellememiştim. Swank'ı yeniden başlatmak bana bir bağlantı verdi. Teşekkürler! – Topher

cevap

8

Sen doğru yolda. Özel durum, sınıf yolunuzun org.postgresql.Driver'ın hiçbir yerde olmadığını gösterir.

jarvana.com denetleniyor, bir JDBC 4 sürücüsü için this entry buluyorum. Çalışma ortamı ortamınızın geri kalanına bağlı olarak başka sürümleri de vardır. Bu bağımlılığı eklemek için project.clj dosyanızı düzenleyerek buna dahil edebilirsiniz:

(defproject xxxxxxx 
    ;;; other stuff 

    :dependencies [[org.clojure/clojure "1.2.0"] 
       [postgresql/postgresql "9.0-801.jdbc4"]] 
) 
+0

Projemde zaten postgresql var. Clj - lütfen güncellenmiş cevabımı görün. – Topher

+0

Aynı sorun yaşayan herkes için yukarıdakilerin project.clj dosyasında olduğundan emin olun. Sonra, lein deps'i çalıştırın. Güncellemeyi aldığından emin olmak için REPL'nizi yeniden başlatmanız gerekebilir. – Topher