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
質問 はかなり関連しているように見えますが、それでも答えはありません。
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 を参照してください。
Project/plugins.sbtファイルに行を追加します
libraryDependencies += "mysql" % "mysql-connector-Java" % "5.1.12"
次に、sbtシェルにいる場合は、再起動します。
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
より上のすべてのもの。