やっとScalaのSlick2使ってDBテーブルの中を見れるようになった
いかの2つを参考にして、
Introduction — Slick 2.1.0-M1 documentation
Connections / Transactions — Slick 2.1.0-M1 documentation
こんなソースコードを書いてみた。
動かなかった例
import com.typesafe.slick.driver.ms.SQLServerDriver.simple._ object MSSQLConnectMain { def main(args: Array[String]) { class Party(tag: Tag) extends Table[(Int, String, String)](tag, "Party") { def id = column[Int]("PartyID", O.PrimaryKey) def partyType = column[String]("PartyType") def party = column[String]("Party") def * = (id, partyType, party) } val parties = TableQuery[Party] println("start query") val db = Database.forURL("jdbc:sqlserver://HOST\\SQLEXPRESS/DBName:1433;user=hoge;password=fuga" , driver = "net.sourceforge.jtds.jdbc.Driver" ) val query = for (p <- parties; if p.partyType === "Broker") yield (p.partyType, p.party) db.withSession{ implicit session => query.list(session).map(println(_)) } println("end query") } }
でもこんなエラー。
java.sql.SQLException: No suitable driver found for jdbc:sqlserver:
わからんなー、といろいろ調べたところ、jtdsではjdbcの指定方法が違うそうだ。
SQL Serverに接続するオープンソースのType4 JDBC Driver「jTDS」 - あおきのTechメモ
Microsoft謹製のドライバーでは、 jdbc:sqlserver://HOST\DBInstance;database=DBName らしい
一方jTDSでは、 jdbc:jtds:sqlserver://HOST:PORT/DBName;instance=DBInstance となる。では、早速直してみた。
良い例:
object MSSQLConnectMain { def main(args: Array[String]) { class Party(tag: Tag) extends Table[(Int, String, String)](tag, "Party") { def id = column[Int]("PartyID", O.PrimaryKey) def partyType = column[String]("PartyType") def party = column[String]("Party") def * = (id, partyType, party) } val parties = TableQuery[Party] println("start query") val db = Database.forURL("jdbc:jtds:sqlserver://HOST:1433/DBName;instance=SQLEXPRESS;user=hoge;password=fuga" , driver = "net.sourceforge.jtds.jdbc.Driver" ) val query = for (p <- parties; if p.partyType === "Broker") yield (p.partyType, p.party) db.withSession{ implicit session => query.list(session).map(println(_)) } println("end query") } }
これでうまく行った。map(println(_))が変? 細かいことは気にしないで……。