2010-10-09 128 views
25

當我的SBT會話中運行我的第一次項目時,它拋出當試圖訪問MySQL數據庫以下異常:如何在SBT Scala項目中使用MySQL JDBC驅動程序?

java.lang.NoClassDefFoundError: scala/Ordered

當我再次運行它(和之後的任何時間,期間它引發了一個不同的問題:

java.sql.SQLException: No suitable driver found for 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 

我見過question小艾相關,但始終無人接聽。

回答

25

在SBT項目類應該有一行:

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

這將導入JDBC驅動程序的JAR文件爲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

+1

有同樣的問題,這解決了它! – Albert 2012-03-06 17:00:54

+0

同樣的問題,此修復程序無法正常工作 – wedens 2013-12-18 09:02:21

11

在項目/ plugins.sbt文件中添加一行

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

然後如果在SBT外殼,重新啓動它。

1

必須在您的build.sbt中配置MySQL相關性。目前的風格是聲明庫的依賴,像這樣:

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(寫作時的最新版本)。