2010-10-09 7 views
25

Kiedy uruchomić mój projekt po raz pierwszy podczas sesji SBT, rzuca następujący wyjątek podczas próby uzyskania dostępu do bazy danych MySQL:Jak używać sterownika JDBC MySQL w projekcie SBT Scala?

java.lang.NoClassDefFoundError: scala/Ordered

gdy uruchomię go ponownie (i dowolnym czasie po niej, podczas ta sama sesja SBT), rzuca inną:

Kiedy używałem NetBeans, ten sam kod działał Ok. Teraz, gdy używam SBT do budowania i Kate do ręcznego edytowania i zarządzania moim projektem, otrzymuję te błędy środowiska wykonawczego.

Sterownik JDBC MySQL (pobrany bezpośrednio z MySQL.com) JAR znajduje się w katalogu lib projektu, a wszystkie pozostałe biblioteki, które tam umieściłem działają poprawnie.

Oto kod:

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 

Widziałem question który wygląda dość pokrewne, ale nadal nie ma odpowiedzi.

Odpowiedz

25

W klasie projektu SBT powinna istnieć linia:

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

To będzie zaimportować plik JAR sterownika JDBC dla MySQL.

Czy załadowałeś sterownik? Jeśli używasz tej klasy Util sprowadzić połączenia, kierowca zostanie załadowany dokładnie jeden raz:

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

Kod pochodzi z prostego SBT - MySQL poradnik napisałem jakiś czas temu. Jeśli chcesz, aby pobrać pełną samouczek, patrz http://github.com/ollekullberg/SimpleOrder

+1

Miał ten sam problem, to naprawia to! – Albert

+0

ten sam problem i ta poprawka nie działa – wedens

11

W projekcie/plugins.sbt pliku dodać linię

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

Następnie jeśli w powłoce SBT, uruchom go ponownie.

1

Zależność MySQL musi być skonfigurowana w twoim build.sbt. Obecnie styl jest zadeklarować zależności bibliotecznych tak:

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

Dodaj następujący wewnątrz Seq dodać MySQL:

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

Należy pamiętać, że + oznacza, że ​​będzie uzyskać najnowszą wersję moll; cokolwiek powyżej 5.1, na przykład 5.1.27 (aktualna wersja w momencie pisania).

Powiązane problemy