Frage

Wenn ich mein Projekt zum ersten Mal während einer SBT-Sitzung ausgeführt wird, wirft es die folgende Ausnahme, wenn sie Zugriff auf eine MySQL-Datenbank versuchen:

  

java.lang.NoClassDefFoundError: scala / Bestellen

Wenn ich es noch einmal (und jederzeit, nachdem er während der gleichen Sitzung SBT) laufen, wirft es ein anderes:

  

java.sql.SQLException: Kein passender Treiber gefunden für jdbc: mysql: // localhost / ...

Als ich NetBeans wurde mit dem gleichen Code arbeitet Ok. Jetzt, da ich SBT verwenden für den Bau und Kate zu bearbeiten und verwalten mein Projekt manuell, ich diese Laufzeitfehler erhalten.

MySQL JDBC-Treiber (heruntergeladen rechts von MySQL.com) JAR ist in lib des Projekts und alle anderen Bibliotheken Ich habe dort Arbeit ok setzen.

Hier ist der Code:

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

Ich habe eine Frage gesehen das sieht ziemlich verwandt, aber noch keine Antwort.

War es hilfreich?

Lösung

In der SBT Projektklasse sollte es eine Linie sein:

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

Dies wird die JDBC-Treiber-JAR-Datei für MySQL importieren.

Haben laden Sie den Treiber? Wenn Sie diese Util-Klasse verwenden, um die Verbindungen zu holen, wird der Treiber geladen genau einmal:

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

Der Code wird von einem einfachen SBT genommen - MySQL Tutorial ich vor einiger Zeit schrieb. Wenn Sie die komplette Tutorial herunterladen möchten, finden Sie unter http://github.com/ollekullberg/SimpleOrder

Andere Tipps

Im Projekt / plugins.sbt Datei fügen Sie eine Zeile

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

Dann, wenn Ihr in der sbt Shell, es neu zu starten.

Die MySQL-Abhängigkeit müssen in Ihrem build.sbt konfiguriert werden. Derzeit ist die Stilbibliothek Abhängigkeiten zu erklären, wie so:

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

Fügen Sie die folgende in der Seq mysql hinzufügen:

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

Beachten Sie, dass der + bedeutet, dass es die letzte kleinere Version erhalten wird; alles, was über 5.1, wie 5.1.27 (die aktuelle Version zum Zeitpunkt des Schreibens).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top