PostgreSQL / Clojure的驱动程序问题

问题描述

| 我正在尝试访问Clojure内部的Postgres数据库。我发现了大量使用DB的项目示例,像这样设置数据库
(def db
    {:classname \"org.postgresql.Driver\"
     :subprotocol \"postgresql\"
     :subname \"//localhost/testdb\"
     :username \"postgres\"
     :password \"postgres\"})
然后,我试图像这样访问数据库
(sql/with-connection db
    (sql/with-query-results recs [\"select * from asdf\"]
        (doseq [rec recs]
            (println rec))))
但是,我收到此错误
No suitable driver found for jdbc:postgresql://localhost/testdb
  [Thrown class java.sql.sqlException]
我假设问题出在
:classname \"org.postgresql.Driver\"
,但是我不确定解决方案是什么。我想我需要提供此驱动程序,但是我不确定在哪里获取或放置它。 postgresql.org上有可用的下载-我应该下载吗?还是我可以在项目设置中放一些东西,让
lein
作为依赖项下载?一旦有了它,它会去哪里? 编辑(响应@mtnygard): 我的project.clj中有这个:
(defproject hello-www \"1.0.0-SNAPSHOT\"
    :dependencies [[org.clojure/clojure \"1.2.1\"]
                   [postgresql/postgresql \"8.4-702.jdbc4\"]
                   ...]
我的postgres版本是8.4:
[/media/data/dev/clojure/hello-www (postgres *)]$ postgres --version
postgres (Postgresql) 8.4.8
    

解决方法

您走在正确的轨道上。该异常表示您的类路径在任何地方都没有org.postgresql.Driver。 在检查jarvana.com时,我发现此条目是postgres JDBC 4驱动程序的。根据运行时环境的其余部分,还有其他版本可用。您可以通过编辑project.clj文件来添加此依赖关系,以包括以下内容:
(defproject xxxxxxx
  ;;; other stuff

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