Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure Lein can';找不到Oracle JDBC驱动程序_Oracle_Maven_Jdbc_Clojure_Leiningen - Fatal编程技术网

Clojure Lein can';找不到Oracle JDBC驱动程序

Clojure Lein can';找不到Oracle JDBC驱动程序,oracle,maven,jdbc,clojure,leiningen,Oracle,Maven,Jdbc,Clojure,Leiningen,我正在尝试使用Clojure/Lein连接到Oracle数据库 我从这里下载了ojdbc.jar: 然后,我使用以下方式将其安装到我的本地回购中: mvn install:install-file -Dfile=C:\dev\tools\ojdbc14.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=9.2.0.5 -Dpackaging=jar -DgeneratePom=true My project.clj如下所示: (d

我正在尝试使用Clojure/Lein连接到Oracle数据库

我从这里下载了ojdbc.jar:

然后,我使用以下方式将其安装到我的本地回购中:

mvn install:install-file -Dfile=C:\dev\tools\ojdbc14.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=9.2.0.5 -Dpackaging=jar -DgeneratePom=true
My project.clj如下所示:

(defproject spike "0.1.0-SNAPSHOT"
  :description "spike"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.5.1"]
                [org.clojure/java.jdbc "0.3.0-alpha4"]
                [compojure "1.1.5"]
                [ring/ring-json "0.1.2"]
                [oracle/classes12dms "9.0.4"]
                [com.oracle/ojdbc14 "9.2.0.5"]
        ]

  :plugins [[lein-ring "0.8.5"] [lein-deps-tree "0.1.2"]]
  :ring {:handler spike.handler/app}
   :repositories [["internal" "http://xxx:8080/artifactory/repo"] 
                 ["jboss" "https://repository.jboss.org/nexus/content/groups/public"]
                 ["jboss-dep" "https://repository.jboss.org/nexus/content/repositories/deprecated"] ]

  )
(ns spike.spikeDb
  (:require [clojure.java.jdbc :as jdbc]
            [clojure.java.jdbc.sql :as sql])
  (:import  java.sql.Types))

(def devdb {:classname "oracle.jdbc.driver.OracleDriver"
            :subprotocol "oracle"
            :subname "thin:xxx/xxx@xxx:1528/xxx"})

(defn get-xxx [id]
 (jdbc/query devdb
   (sql/select [:TITLE :DESCRIPTION]
             :XXX (sql/where {:CODE id}))))
访问spikeDb.clj的过程如下所示:

(defproject spike "0.1.0-SNAPSHOT"
  :description "spike"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.5.1"]
                [org.clojure/java.jdbc "0.3.0-alpha4"]
                [compojure "1.1.5"]
                [ring/ring-json "0.1.2"]
                [oracle/classes12dms "9.0.4"]
                [com.oracle/ojdbc14 "9.2.0.5"]
        ]

  :plugins [[lein-ring "0.8.5"] [lein-deps-tree "0.1.2"]]
  :ring {:handler spike.handler/app}
   :repositories [["internal" "http://xxx:8080/artifactory/repo"] 
                 ["jboss" "https://repository.jboss.org/nexus/content/groups/public"]
                 ["jboss-dep" "https://repository.jboss.org/nexus/content/repositories/deprecated"] ]

  )
(ns spike.spikeDb
  (:require [clojure.java.jdbc :as jdbc]
            [clojure.java.jdbc.sql :as sql])
  (:import  java.sql.Types))

(def devdb {:classname "oracle.jdbc.driver.OracleDriver"
            :subprotocol "oracle"
            :subname "thin:xxx/xxx@xxx:1528/xxx"})

(defn get-xxx [id]
 (jdbc/query devdb
   (sql/select [:TITLE :DESCRIPTION]
             :XXX (sql/where {:CODE id}))))
我使用

lein ring server
但当我导航到该页面时,我会看到:

java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:xxx/xxx@xxx:1528/xxx
DriverManager.java:604  java.sql.DriverManager.getConnection
DriverManager.java:190  java.sql.DriverManager.getConnection
jdbc.clj:206    clojure.java.jdbc/get-connection
jdbc.clj:628    clojure.java.jdbc/db-with-query-results*
jdbc.clj:646    clojure.java.jdbc/query
RestFn.java:425 clojure.lang.RestFn.invoke
spikeDb.clj:13  spike.spikeDb/get-xxx

我做错了什么

我一直在与同样的错误作斗争。我发现实现这一点的唯一方法是不要使用
com.oracle
的maven
groupId
,而是使用类似于
local
的其他东西

尝试以下操作(请注意新的groupId):

然后在
project.clj
中引用ojdbc依赖项,如下所示:

[local/ojdbc14 "9.2.0.5"]

下载最新的Oracle驱动程序并将其与lein 2一起安装到本地存储库中的最简单方法是使用以下插件:

要使用它,请编辑您的
~/.lein/profiles.clj
并添加
{:user{:plugins[[lein localrepo“0.5.3”]}

现在从命令行使用它将驱动程序安装到本地存储库中

lein localrepo install -r D:\Path\To\Repo\
                          D:\Path\To\ojdbc6.jar
                          oracle.jdbc/oracledriver "12.1.0.1"
现在,您可以在project.clj中引用它,以及clojure.java.jdbc

(defproject spike "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/java.jdbc "0.3.3"]
                 [oracle.jdbc/oracledriver "12.1.0.1"]])
查看您当前的db规范,我注意到驱动程序类、subtocol和subname不正确

(ns spike.spikedb
  (:require [clojure.java.jdbc :as jdbc]))

(def db
  {:classname    "oracle.jdbc.OracleDriver"
   :subprotocol  "oracle:thin"
   :subname      "//@hostname:port:sid"
   :user         "username"
   :password     "password"}))

(jdbc/query db ["select ? as one from dual" 1])

如何使Oracle JDBC驱动程序可用于Clojure/Leiningen

  • 从下载ojdbc7.jar

  • mvn安装:安装文件-DgroupId=com.oracle-DartifactId=ojdbc-Dversion=12.1.0.2-dpackage=jar-Dfile=ojdbc7.jar-DgeneratePom=true

  • 在project.clj中:

    :依赖项[…]。。。 [com.oracle/ojdbc“12.1.0.2”] …]


  • 在普通Java中,如果不是12.1.0.2,请根据当前ojdbc版本的需要调整以上内容。如果自动驱动程序注册不起作用,最好执行
    Class.forName(“oracle.jdbc.driver.OracleDriver”)
    。看起来您的db库可能已经在这样做了,但请尝试一下。它还允许您删除类名字符串文字(替换为编译器检查的类文字)。尝试使用mvn dependency:tree打印项目的依赖关系树,以确保oracle.jdbc.driver.OracleDriver位于类路径中。您还可以使用[lein deps:tree]来打印依赖关系树。谢谢Chiron-我可以确认,加载驱动程序时可能出错。尝试在名称空间的顶层添加
    (Class/forName“oracle.jdbc.driver.OracleDriver”)
    ,看看这是否引发任何异常。