使用Clojure连接到Microsoft SQL Server
我正尝试使用Windows身份验证连接到Microsoft SQl Server 2008数据库。 我已经下载了MS SQL Server的JDBC驱动程序,并将其添加到我的CLASSPATH中。使用Clojure连接到Microsoft SQL Server
以下是我的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版本下载。有人能帮助我吗?
在此先感谢
找到了解决办法
(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
希望这会帮助别人
请注意,clojure.contrib.sql已停用(截至2011年中),并由clojure.java.jdbc取代,如Alexey的答案所示。 – 2016-07-31 01:44:23
连接到数据库
在后面软件版本(Cl ojure 1.6+,Microsoft SQL Server 2012和SQL Server的Microsoft JDBC驱动程序4.0)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与微软的JDBC驱动程序正常工作,合并与project.clj defproject如下:
:dependencies [[org.clojure/java.jdbc "0.6.1"]
[com.microsoft.sqlserver/mssql-jdbc "6.3.6.jre8-preview"]]
我需要手动将类路径添加到'project.clj'中,如下所示:':resource-paths [“C:/ Program Files/Java/JDBC/sqljdbc_4.1/enu/sqljdbc41.jar”]' – jocull 2014-12-07 13:56:03
其他注意事项':subname'中的前导'//'很重要。没有它,JDBC连接字符串以令人困惑的方式破坏。 – jocull 2014-12-07 13:56:44
@jocull感谢在':subname'中强调'//'的重要性。关于这个项目。不知何故,在我的情况下,它是工作,而无需手动添加类路径。 – Alexey 2014-12-07 19:23:53
会发生什么情况是代码被转换为Java? – krzysz00 2011-06-13 13:05:56