web-dev-qa-db-ja.com

SBTでMySQL JDBCドライバーを使用する方法Scalaプロジェクト?

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

質問 はかなり関連しているように見えますが、それでも答えはありません。

32
Ivan

SBTプロジェクトクラスには次の行があります。

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

これにより、MySQL用のJDBCドライバーJARファイルがインポートされます。

ドライバーをロードしましたか?このUtilクラスを使用して接続をフェッチする場合、ドライバーは1回だけロードされます。

// 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 を参照してください。

29
olle kullberg

Project/plugins.sbtファイルに行を追加します

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

次に、sbtシェルにいる場合は、再起動します。

13
samthebest

MySQLの依存関係はbuild.sbtで構成する必要があります。現在のスタイルは、次のようにライブラリの依存関係を宣言することです。

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より上のすべてのもの。

1
Nathaniel Ford