我正在尝试访问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
答案 0 :(得分:8)
你走在正确的轨道上。该异常表示您的类路径在任何地方都没有org.postgresql.Driver。
检查jarvana.com,我找到了this entry的postgres JDBC 4驱动程序。还有其他版本可用,具体取决于运行时环境的其余部分。您可以通过编辑project.clj文件来添加此依赖项:
(defproject xxxxxxx
;;; other stuff
:dependencies [[org.clojure/clojure "1.2.0"]
[postgresql/postgresql "9.0-801.jdbc4"]]
)