Clojure JDBC ODBC"未找到数据源名称且未指定默认驱动程序"

时间:2014-11-11 21:12:17

标签: jdbc clojure odbc jdbc-odbc

我正在尝试将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位

1 个答案:

答案 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部分。

相关问题