【问题标题】:How to connect to Oracle DB with slick 3.0.1?如何使用 slick 3.0.1 连接到 Oracle DB?
【发布时间】:2016-03-11 07:50:55
【问题描述】:

我开始学习和试验 slick。

我正在尝试连接到由我们的 DBA 设置的 oracle 开发数据库。

但是我遇到了问题,我无法连接。

这是我到目前为止所做的:

  oracledev = {
   url = "jdbc:oracle:thin:@//vdevdbms2:4208/TPSDEV.IADB.ORG"
   driver = com.typesafe.slick.driver.oracle.OracleDriver
   connectionPool = disable
   keepAliveConnection = true
  }

我的构建中有以下内容

resolvers += "Typesafe Releases" at "http://repo.typesafe.com/typesafe/maven-releases/"

libraryDependencies ++=
  Seq(
        "com.smartlogic.osclient" % "Semaphore-OS-Client" % "Semaphore-3.7.2",
        "com.typesafe.slick" %% "slick-extensions" % "3.1.0",
        "org.slf4j" % "slf4j-nop" % "1.6.4"
     )

到目前为止的代码很简单:

object SlickSpike extends App {

  val db = Database.forConfig("oracledev")

}

我收到以下错误:

线程“主”java.lang.ClassNotFoundException 中的异常:禁用 在 java.lang.ClassLoader.findClass(ClassLoader.java:530) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) 在 slick.util.ClassLoaderUtil$$anon$1.loadClass(ClassLoaderUtil.scala:12) 在 slick.jdbc.JdbcDataSource$.loadFactory$1(JdbcDataSource.scala:30) 在 slick.jdbc.JdbcDataSource$.forConfig(JdbcDataSource.scala:39) 在 slick.jdbc.JdbcBackend$DatabaseFactoryDe​​f$class.forConfig(JdbcBackend.scala:268) 在 slick.jdbc.JdbcBackend$$anon$3.forConfig(JdbcBackend.scala:33) 在 SlickSpike$.delayedEndpoint$SlickSpike$1(SlickSpike.scala:16) 在 SlickSpike$delayedInit$body.apply(SlickSpike.scala:14) 在 scala.Function0$class.apply$mcV$sp(Function0.scala:34) 在 scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12) 在 scala.App$$anonfun$main$1.apply(App.scala:76) 在 scala.App$$anonfun$main$1.apply(App.scala:76) 在 scala.collection.immutable.List.foreach(List.scala:381) 在 scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35) 在 scala.App$class.main(App.scala:76) 在 SlickSpike$.main(SlickSpike.scala:14) 在 SlickSpike.main(SlickSpike.scala) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:483) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

如果我删除该行: **

connectionPool = 禁用

**

然后我得到以下错误:

线程“主”java.lang.ClassNotFoundException 中的异常: slick.jdbc.hikaricp.HikariCPJdbcDataSource$ 在 java.lang.ClassLoader.findClass(ClassLoader.java:530) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) 在 slick.util.ClassLoaderUtil$$anon$1.loadClass(ClassLoaderUtil.scala:12) 在 slick.jdbc.JdbcDataSource$.loadFactory$1(JdbcDataSource.scala:30) 在 slick.jdbc.JdbcDataSource$.forConfig(JdbcDataSource.scala:35) 在 slick.jdbc.JdbcBackend$DatabaseFactoryDe​​f$class.forConfig(JdbcBackend.scala:268) 在 slick.jdbc.JdbcBackend$$anon$3.forConfig(JdbcBackend.scala:33) 在 SlickSpike$.delayedEndpoint$SlickSpike$1(SlickSpike.scala:16) 在 SlickSpike$delayedInit$body.apply(SlickSpike.scala:14) 在 scala.Function0$class.apply$mcV$sp(Function0.scala:34) 在 scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12) 在 scala.App$$anonfun$main$1.apply(App.scala:76) 在 scala.App$$anonfun$main$1.apply(App.scala:76) 在 scala.collection.immutable.List.foreach(List.scala:381) 在 scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35) 在 scala.App$class.main(App.scala:76) 在 SlickSpike$.main(SlickSpike.scala:14) 在 SlickSpike.main(SlickSpike.scala)

我做错了什么?

我只想拥有一个 10 个连接池,并连接到数据库,但我不知道如何设置它。有人可以帮忙吗?

编辑2

我解决了最初的问题,但我仍有疑问,无法让一切正常工作。

我这样改变我的构建:

libraryDependencies ++=
  Seq(
       "org.slf4j" % "slf4j-api" % "1.7.13",
       "org.slf4j" % "slf4j-simple" % "1.7.13",
       "com.smartlogic.osclient" % "Semaphore-OS-Client" % "Semaphore-3.7.2"  exclude("org.slf4j","slf4j-log4j12"),
       "com.typesafe.slick" %% "slick" % "3.1.0",
       "com.typesafe.slick" %% "slick-extensions" % "3.1.0",
       "com.typesafe.slick" %% "slick-hikaricp" % "3.1.0",
       "com.oracle" % "ojdbc6" % "11.2.0.2.0"
     )

我求助于添加 slick-hikaricp,即使我最初并不打算使用。 我现在也明白配置中的 oracle 驱动程序是实际的 oracle 驱动程序,而不是光滑的驱动程序。这实际上反映在我对配置所做的更改中,如下所示:

oracledev = {
  url = "jdbc:oracle:thin:@//vdevdbms2:4208/TPSDEV.IADB.ORG"
  driver = oracle.jdbc.OracleDriver
  //  connectionPool = disable
  keepAliveConnection = true
  //databaseName = "BRIKPOOLPARTYDEV"
  user = "*******"
  password = "*******"
}

问题:

1 - 使用 Oracle 时默认需要 slick-hikaricp。事实上,如果我不添加它并注释掉 connectionPool = disable,在我的情况下,无论如何未注释时都不起作用,程序无法编译。

2 - 我仍然无法连接,我错过了什么吗?

请帮忙

【问题讨论】:

    标签: oracle scala slick slick-3.0


    【解决方案1】:

    oracle、db2 和 ms sql 驱动程序不是免费的。有一个单独的“slick-extensions”包,其中包含可用于开发的驱动程序。但是您必须支付冷现金才能将它们用于生产。

    【讨论】:

    • 是的,我知道。我想在做出任何决定之前先试一试。
    【解决方案2】:

    您应该下载 ojdbc7.jar 并将其放在根项目 (lib) 的文件夹中,然后重新构建它。

    【讨论】:

      【解决方案3】:

      connectionPool 配置中的条目应该被禁用而不是禁用。

      在决定将加载什么 JdbcDataSource 时使用此配置条目。 禁用配置条目尝试加载名为 disable 的 JdbcDataSourceFactoryfactory。

      【讨论】:

        猜你喜欢
        • 2023-04-04
        • 2021-10-21
        • 1970-01-01
        • 1970-01-01
        • 2016-06-17
        • 1970-01-01
        • 1970-01-01
        • 2018-07-18
        • 2016-06-23
        相关资源
        最近更新 更多