PostgreSQL/Clojure的驱动程序问题

Top*_*her 8 java postgresql jdbc clojure

我试图访问Clojure内的Postgres数据库.我发现了大量使用DB的项目示例,如下所示设置数据库:

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

我然后尝试访问数据库,如下所示:

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

但是,我收到此错误:

No suitable driver found for jdbc:postgresql://localhost/testdb
  [Thrown class java.sql.SQLException]
Run Code Online (Sandbox Code Playgroud)

我假设问题在于: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"]
                   ...]
Run Code Online (Sandbox Code Playgroud)

我的postgres版本是8.4:

[/media/data/dev/clojure/hello-www (postgres *)]$ postgres --version
postgres (PostgreSQL) 8.4.8
Run Code Online (Sandbox Code Playgroud)

小智 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"]]
 )
Run Code Online (Sandbox Code Playgroud)