问题描述
|
我正在尝试访问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\"]]
)