Как использовать драйвер MySQL JDBC в проекте SBT Scala? - PullRequest
31 голосов
/ 09 октября 2010

Когда я запускаю свой проект впервые во время сеанса SBT, при попытке доступа к базе данных MySQL выдается следующее исключение:

java.lang.NoClassDefFoundError: scala / Ordered

Когда я запускаю его снова (и в любое время после него, во время того же сеанса SBT), он выдает другой:

java.sql.SQLException: не найден подходящий драйвер для jdbc: mysql: //localhost/...

Когда я использовал NetBeans, тот же код работал нормально. Теперь, когда я использую SBT для сборки и Kate для редактирования и управления своим проектом вручную, я получаю эти ошибки времени выполнения.

Драйвер MySQL JDBC (загружен прямо с MySQL.com) JAR находится в каталоге lib проекта, и все остальные библиотеки, которые я там поместил, работают нормально.

Вот код:

import java.sql._
...
// read
val dbc : Connection = DriverManager.getConnection("jdbc:mysql://localhost/...")
val st : Statement = dbc.createStatement
val rs : ResultSet = st.executeQuery("SELECT ...")
if(rs.first) result = rs.getDouble("field")
dbc.close
...
// write
val dbc : Connection = DriverManager.getConnection("jdbc:mysql://localhost/...")
val st : Statement = dbc.createStatement
st.execute("UPDATE ...")
dbc.close

Я видел вопрос , который выглядит довольно взаимосвязанным, но до сих пор нет ответа.

Ответы [ 3 ]

28 голосов
/ 09 октября 2010

В классе проекта SBT должна быть строка:

 // Declare MySQL connector Dependency
  val mysql = "mysql" % "mysql-connector-java" % "5.1.12"

Это импортирует файл JAR драйвера JDBC для MySQL.

Вы загрузили драйвер?Если вы используете этот класс Util для извлечения соединений, драйвер будет загружен ровно один раз:

// Util Class
object DaoUtil {
  import java.sql.{DriverManager, Connection}

  private var driverLoaded = false

  private def loadDriver()  {
    try{
      Class.forName("com.mysql.jdbc.Driver").newInstance
      driverLoaded = true
    }catch{
      case e: Exception  => {
        println("ERROR: Driver not available: " + e.getMessage)
        throw e
      }
    }
  }

  def getConnection(dbc: DbConnection): Connection =  {
    // Only load driver first time
    this.synchronized {
      if(! driverLoaded) loadDriver()
    }

    // Get the connection
    try{
      DriverManager.getConnection(dbc.getConnectionString)
    }catch{
      case e: Exception  => {
        println("ERROR: No connection: " + e.getMessage)
        throw e
      }
    }
  }
}

Код взят из простого руководства SBT - MySQL, которое я написал некоторое время назад.Если вы хотите загрузить полное руководство, см. http://github.com/ollekullberg/SimpleOrder

13 голосов
/ 22 января 2013

В файле проекта / plugins.sbt добавьте строку

libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.12"

Тогда, если вы находитесь в оболочке sbt, перезапустите его.

1 голос
/ 17 декабря 2013

Зависимость MySQL должна быть настроена в вашем build.sbt. В настоящее время стиль объявляет зависимости библиотеки следующим образом:

libraryDependencies ++= {
  val liftVersion = "2.5.1"
  Seq(
    "net.liftweb"       %% "lift-webkit"        % liftVersion        % "compile",
    "net.liftweb"       %% "lift-mapper"        % liftVersion        % "compile",
    //etc
  )
}

Добавьте следующее внутри Seq, чтобы добавить mysql:

"mysql" % "mysql-connector-java" % "5.1.+"

Обратите внимание, что + означает, что он получит последнюю минорную версию; все, что выше 5.1, например 5.1.27 (текущая версия на момент написания).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...