Подключение к Microsoft SQL Server с помощью Clojure
Я пытаюсь подключиться к базе данных Microsoft SQl Server 2008, используя проверку подлинности Windows.
Я загрузил драйвер JDBC для MS SQL Server и добавил его в свой CLASSPATH.
Ниже приведен мой код clojure. Независимо от того, что я делаю, я получаю java.sql.SQLException: Не найдено подходящего драйвера для jdbc: sqlserver
(ns Test)
(def db {:classname "com.microsoft.jdbc.sqlserver.SQLServerDriver"
:subprotocol "sqlserver"
:subname "server_name"
:DatabaseName "database_name"
:integratedSecurity true
})
(use 'clojure.contrib.sql)
(with-connection db
(with-query-results rs ["SELECT * FROM sys.objects"] (prn rs)))
Я проверил, что у меня есть доступ к базе данных, мой путь к классам правильный, у меня есть правильная версия JDBC. Может кто-то помочь мне здесь.
Заранее спасибо
Ответы
Ответ 1
Найден решение
(use 'clojure.contrib.sql)
(def db {:classname "com.microsoft.sqlserver.jdbc.SQLServerDriver"
:subprotocol "sqlserver"
:subname "//server-name:port;database=database-name;user=sql-authentication-user-name;password=password"
})
;Add Classpath to your C:\Program Files\Java\JDBC\sqljdbc_3.0\enu\sqljdbc4.jar
;Below code demos how to execute a simple sql select query and print it to console
;This query will print all the user tables in your MS SQL Server Database
(with-connection db
(with-query-results rs ["select * from sys.objects where type = 'U'"]
(doseq [row rs] (println (:name row)))
))
Также обновлен wiki http://en.wikibooks.org/wiki/Clojure_Programming/Examples/JDBC_Examples#Microsoft_SQL_Server
Надеюсь, это поможет кому-то
Ответ 2
Подключение к базе данных
В более поздних версиях программного обеспечения (Clojure 1.6+, Microsoft SQL Server 2012 и Microsoft JDBC Driver 4.0 для SQL Server) код, отправленный Ash, работает только с этими изменениями. Я также обновил его в соответствии с моими текущими знаниями принципов Clojure для стилизации кода.
(require '[clojure.java.jdbc :as jdbc])
;; you can optionally specify :host and :port to override the defaults
;; of "127.0.0.1" and 1433 respectively:
(def db-spec {:dbtype "mssql"
:dbname "database-name"
:user "sql-authentication-user-name"
:password "password"})
(let [rows (jdbc/query db-spec
["select * from sys.objects where type = 'U'"])]
(doseq [row rows] (println (:name row)))))
В случае наличия нескольких экземпляров SQL Server на одном компьютере вы можете указать имя экземпляра как часть :host
, как это (этот пример относится к имени экземпляра SQL Server Express по умолчанию на том же компьютере)
:host "localhost\\sqlexpress"
Настройка Leiningen
Чтобы Leiningen корректно работал с драйвером Microsoft JDBC, объедините следующие с defproject в project.clj:
:dependencies [[org.clojure/java.jdbc "0.6.1"]
[com.microsoft.sqlserver/mssql-jdbc "6.3.6.jre8-preview"]]