Проблема с драйвером в PostgreSQL / Clojure

8

Я пытаюсь получить доступ к базе данных 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
  • 0
    Вы запускали "lein deps" после добавления postgresql в свой project.clj?
  • 0
    Кроме того, как вы выполняете основную часть вашего проекта? "lein deps" просто помещает банки в lib /. Вы все еще должны запустить вашу программу с настроенным путем к классам. Например, «lein run» и «lein repl» будут настраивать ваш classpath.
Показать ещё 1 комментарий
Теги:
jdbc
clojure

1 ответ

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"]]
 )
  • 0
    У меня уже есть postgresql в моем project.clj - смотрите мой обновленный ответ.
  • 0
    Для тех, у кого такая же проблема, убедитесь, что все вышеперечисленное есть в project.clj. Затем запустите lein deps . Возможно, вам придется перезапустить ваш REPL, если вы в одном, чтобы убедиться, что он получает обновление.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню