Подключение к Microsoft SQL Server с использованием Clojure - PullRequest
13 голосов
/ 13 июня 2011

Я пытаюсь подключиться к базе данных 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. Может ли кто-нибудь помочь мне здесь.

Заранее спасибо

Ответы [ 2 ]

14 голосов
/ 13 июля 2014

Подключение к базе данных

В более поздних версиях программного обеспечения (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"]]
9 голосов
/ 13 июня 2011

Нашли решение

(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)))
    ))

Также обновил вики http://en.wikibooks.org/wiki/Clojure_Programming/Examples/JDBC_Examples#Microsoft_SQL_Server

Надеюсь, это кому-нибудь поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...