Pregunta

Cuando ejecuto mi proyecto por primera vez durante una sesión de SBT, que arroja la siguiente excepción cuando se trata de acceder a una base de datos MySQL:

  

java.lang.NoClassDefFoundError: Scala / ordenada

Cuando corro de nuevo (y en cualquier momento después de que, durante la misma sesión SBT), que arroja una diferente:

  

java.sql.SQLException: No se encontró controlador adecuado para JDBC: mysql: // localhost / ...

Cuando yo estaba usando NetBeans, el mismo código trabajaba Ok. Ahora, como yo uso para la construcción de SBT y Kate para editar y administrar mi proyecto manualmente, consigo estos errores de ejecución.

MySQL JDBC (descargado desde MySQL.com) JAR está en el directorio lib del proyecto y todas las otras bibliotecas que he puesto ahí bien el trabajo.

Este es el código:

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

he visto un pregunta que se ve bastante relacionados, pero aún no hay respuesta.

¿Fue útil?

Solución

En la clase de proyecto SBT no debería ser una línea:

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

Esto importará el archivo JAR del controlador JDBC para MySQL.

¿Se cargó el conductor? Si utiliza esta clase Util a buscar las conexiones, el conductor se cargará exactamente una vez:

// 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
      }
    }
  }
}

El código se toma de un simple SBT - MySQL tutorial que escribí hace algún tiempo. Si desea descargar el tutorial completo, consulte http://github.com/ollekullberg/SimpleOrder

Otros consejos

En el archivo de proyecto / plugins.sbt añadir una línea

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

A continuación, si estás en la cáscara SBT, reiniciarlo.

La dependencia MySQL debe configurarse en su build.sbt. Actualmente el estilo es declarar las dependencias de bibliotecas, así:

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

Añadir la siguiente dentro de la Seq añadir MySQL:

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

Tenga en cuenta que los medios + que va a conseguir la última versión de menor importancia; cualquier cosa por encima 5.1, como 5.1.27 (la versión actual en el momento de la escritura).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top