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与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)
找到了解决方案
(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
希望这会对某人有所帮助