2010-10-09 76 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(写作时的最新版本)。