Я пытаюсь получить доступ к базе данных Postgres внутри Clojure. Я нашел массу примеров проектов с использованием БД, создав базу данных следующим образом:
(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): У меня это в моем проекте .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"]]
)
lein deps
. Возможно, вам придется перезапустить ваш REPL, если вы в одном, чтобы убедиться, что он получает обновление.