我正在尝试将clojure连接到odbc数据源。数据源是SQL Server 2014数据库,配置有系统DSN“someDatabase”。数据库使用Windows身份验证。 ODBC源配置正确,我可以使用java中的DriverManager进行连接。尝试连接clojure / java.jdbc时出现以下错误:
SQLException [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified sun.jdbc.odbc.JdbcOdbc.createSQLException (:-1)
core.clj
(ns deleteme.core)
(require '[clojure.java.jdbc :as j])
(def db-spec {:classname "sun.jdbc.odbc.JdbcOdbcDriver"
:subprotocol "odbc"
:subname "jdbc:odbc:someDatabase"})
(j/with-connection db-spec
(j/with-query-results rs ["select top 10 * from someTable"]
(doseq [row rs] (println (:name row)))))
project.clj
(defproject deleteme "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.6.0"]
[org.clojure/java.jdbc "0.1.1"]
])
显然我错过了什么。
os:Windows 7 32位
答案 0 :(得分:1)
好像你肯定找到了正确的司机。
这是否适用于Clojure?
(Class/forName "sun.jdbc.odbc.JdbcOdbcDriver")
(def conn (java.sql.DriverManager/getConnection "jdbc:odbc:someDatabase"))
(def rs (.executeQuery (.createStatement conn) "select top 10 * from someTable"))
试图判断问题是在java.jdbc内部还是外部。
由于这有效,我强烈怀疑有关java.jdbc构建或设置连接属性的方式,导致了除上述之外的其他内容。我认为特别是subname应该只是“someDatabase”。 java.jdbc正在从子协议构建jdbc:odbc部分。