如何在SBT Scala项目中使用MySQL JDBC驱动程序?

Iva*_*van 32 mysql scala jdbc sbt

当我在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
Run Code Online (Sandbox Code Playgroud)

我看过一个看起来非常相关的问题,但仍然没有答案.

oll*_*erg 29

在SBT项目类中应该有一行:

 // Declare MySQL connector Dependency
  val mysql = "mysql" % "mysql-connector-java" % "5.1.12"
Run Code Online (Sandbox Code Playgroud)

这将导入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
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

代码来自一个简单的SBT - 我前一段时间写的MySQL教程.如果您想下载完整的教程,请访问http://github.com/ollekullberg/SimpleOrder


sam*_*est 13

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

libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.12"
Run Code Online (Sandbox Code Playgroud)

然后,如果你在sbt shell中,重新启动它.