2011-06-13 11 views
11

Estoy intentando conectar con la base de datos Microsoft SQL Server 2008 mediante la autenticación de Windows. He descargado el controlador JDBC para MS SQL Server y lo he agregado a mi CLASSPATH.Conexión a Microsoft SQL Server con Clojure

A continuación se muestra el código clojure. No importa lo que hago me sale java.sql.SQLException: No se encontró controlador adecuado para 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))) 

He comprobado que tengo acceso en la base de datos, mi ruta de clases es correcta, no tengo la versión correcta de JDBC descargado . ¿Puede alguien ayudarme aquí?

Gracias de antemano

+0

Lo que pasa es que el código se traduce a Java? Tenga en cuenta que – krzysz00

Respuesta

8

encontrado la solución

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

también actualizó el wiki http://en.wikibooks.org/wiki/Clojure_Programming/Examples/JDBC_Examples#Microsoft_SQL_Server

Esperamos que esto ayude a alguien

+1

clojure.contrib.sql ha sido descontinuado (a partir de mediados de 2011) y se sustituye por clojure.java.jdbc, como se muestra en la respuesta de Alexey. –

10

Conexión a la base de datos

En la tarde versiones de software (Cl ojure 1.6+, Microsoft SQL Server 2012 y Microsoft JDBC Driver 4.0 para SQL Server) el código publicado por Ash solo funciona con estas modificaciones. También lo actualicé de acuerdo con mi conocimiento actual de las pautas de diseño del código de 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))))) 

En el caso de tener varias instancias de SQL Server en la misma máquina, puede especificar el nombre de instancia como parte de la :host como esto (este ejemplo es que el nombre de la instancia predeterminada de SQL Server Express en el mismo máquina):

:host "localhost\\sqlexpress" 

Configuración de Leiningen

Para hacer Leiningen funciona correctamente con Microsoft controlador JDBC, se funden con la siguiente defproject en project.clj:

:dependencies [[org.clojure/java.jdbc "0.6.1"] 
       [com.microsoft.sqlserver/mssql-jdbc "6.3.6.jre8-preview"]] 
+0

Necesitaba manualmente agregar mi classpath en 'project.clj' como lo hace:': resource-paths ["C:/Archivos de programa/Java/JDBC/sqljdbc_4.1/enu/sqljdbc41.jar"] ' – jocull

+0

Nota adicional que el principio '//' en ': subname' es importante. Sin él, la cadena de conexión JDBC se rompe de una manera confusa. – jocull

+0

@jocull Gracias por enfatizar la importancia de '//' en ': subname'. En cuanto al proyecto. De alguna manera en mi caso, estaba funcionando sin agregar classpath manualmente. – Alexey

Cuestiones relacionadas