使用Clojure连接到Microsoft SQL Server

Ash*_*Ash 14 sql sql-server jdbc clojure

我正在尝试使用Windows身份验证连接到Microsoft SQl Server 2008数据库.我已经下载了MS SQL Server的JDBC驱动程序,并将其添加到我的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)))
Run Code Online (Sandbox Code Playgroud)

我已经验证我可以访问数据库,我的类路径是正确的,我已经下载了正确的JDBC版本.有人可以帮助我吗?

提前致谢

Ale*_*xey 16

连接到数据库

在后来的软件版本(Clojure 1.6 +,Microsoft SQL Server 2012和Microsoft JDBC驱动程序4.0 for 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)))))
Run Code Online (Sandbox Code Playgroud)

如果在同一台计算机上有多个SQL Server实例,则可以将实例名称指定:host为此类似的一部分(此示例适用于同一台计算机上的SQL Server Express的默认实例名称):

:host "localhost\\sqlexpress"
Run Code Online (Sandbox Code Playgroud)

配置Leiningen

要使Leiningen与Microsoft JDBC Driver一起正常工作,请将以下内容与project.clj中的defproject合并:

:dependencies [[org.clojure/java.jdbc "0.6.1"]
               [com.microsoft.sqlserver/mssql-jdbc "6.3.6.jre8-preview"]]
Run Code Online (Sandbox Code Playgroud)

  • 该驱动程序现在可从Maven获得,网址为https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc (2认同)

Ash*_*Ash 9

找到了解决方案

(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)))
    ))
Run Code Online (Sandbox Code Playgroud)

还更新了维基http://en.wikibooks.org/wiki/Clojure_Programming/Examples/JDBC_Examples#Microsoft_SQL_Server

希望这会对某人有所帮助