当我在SBT会话期间第一次运行我的项目时,它在尝试访问MySQL数据库时抛出以下异常:
java.lang.NoClassDefFoundError:scala / Ordered
当我再次运行它(以及之后的任何时间,在同一个SBT会话期间),它会抛出另一个:
java.sql.SQLException:找不到合适的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看起来非常相关,但仍无法回答。
答案 0 :(得分:27)
在SBT项目课中应该有一行:
// Declare MySQL connector Dependency
val mysql = "mysql" % "mysql-connector-java" % "5.1.12"
这将导入MySQL的JDBC驱动程序JAR文件。
你加载了驱动程序吗?如果使用此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 :(得分:13)
在project / plugins.sbt文件中添加一行
libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.12"
然后,如果你在sbt shell中,重新启动它。
答案 2 :(得分: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
(撰写本文时的当前版本)。