2014-11-11 2 views
0

ODBC 데이터 소스에 clojure를 연결하려고합니다. 데이터 원본은 시스템 DSN "someDatabase"로 구성된 SQL Server 2014 데이터베이스입니다. DB는 Windows 인증을 사용합니다. ODBC 소스가 올바르게 구성되었고 Java의 DriverManager를 사용하여 연결할 수 있습니다.Clojure JDBC ODBC "데이터 소스 이름을 찾을 수없고 기본 드라이버가 지정되지 않았습니다."

(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"] 
]) 

분명히 내가 '

SQLException [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified sun.jdbc.odbc.JdbcOdbc.createSQLException (:-1) 

core.clj : 나는 Clojure의/java.jdbc와 연결을 시도하는 다음과 같은 오류가 뭔가 빠졌어요.

OS : 당신은 확실히 올바른 드라이버를 찾는 것 같은 윈도우 7 32 비트

답변

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 부분을 빌드합니다.

+0

확인하십시오. 결과를 얻을 수 있어요 (.getString rs "someField") – ZeroEric

+0

"jdbc : odbc : someDatabase"에서 "someDatabase"로 서브 네임을 변경하면이 문제가 해결됩니다. 고맙습니다! – ZeroEric

관련 문제