Scala,巧妙连接到MSSQL服务器
- 作者: 章祈凌-
- 来源: 51数据库
- 2022-10-19
问题描述
我正在尝试使用SLICK框架连接到MSSQL数据库。下面的代码显示了我的第一次尝试,但我找不出哪里出了问题。
离开时出现此错误,如下所示: [1]Value Create不是scala.slick.lifted.DDL的成员
现在我删除该行,因为我不一定需要在Scala代码中创建表。但随后又出现了另一个错误: [2]值映射不是对象asd.asd.App.Coffee的成员package asd.asd import scala.slick.driver.SQLServerDriver._ import scala.slick.session.Database.threadLocalSession object App { object Coffees extends Table[(String, Int, Double)]("COFFEES") { def name = column[String]("COF_NAME", O.PrimaryKey) def supID = column[Int]("SUP_ID") def price = column[Double]("PRICE") def * = name ~ supID ~ price } def main(args : Array[String]) { println( "Hello World!" ) val db = slick.session.Database.forURL(url = "jdbc:jtds:sqlserver", user = "test", password = "test", driver = "scala.slick.driver.SQLServerDriver") db withSession { Coffees.ddl.create [1] // Coffees.insertAll( // ("Colombian", 101, 7.99), // ("Colombian_Decaf", 101, 8.99), // ("French_Roast_Decaf", 49, 9.99) // ) val q = for { c <- Coffees [2] } yield (c.name, c.price, c.supID) println(q.selectStatement) q.foreach { case (n, p, s) => println(n + ": " + p) } } } }
推荐答案
问题已解决。我所做的如下:更新到最新的SLICK版本,然后调整代码,如演示的here。之后您需要调换线路
import scala.slick.driver.H2Driver.simple._
与
import scala.slick.driver.SQLServerDriver.simple._
并将连接字符串修改为
[...] Database.forURL("jdbc:jtds:sqlserver://localhost:1433/<DB>;instance=<INSTANCE>", driver = "scala.slick.driver.SQLServerDriver") withSession { [...]
解决了这个问题后,我决定使用C3P0池连接(这使Slick速度非常快,因此是第一个可用的,我强烈建议使用连接池!)。这给我留下了以下数据库对象。
package utils import scala.slick.driver.SQLServerDriver.simple._ import com.mchange.v2.c**0.ComboPooledDataSource object DatabaseUtils { private val ds = new ComboPooledDataSource ds.setDriverClass("scala.slick.driver.SQLServerDriver") ds.setUser("supervisor") ds.setPassword("password1") ds.setMaxPoolSize(20) ds.setMinPoolSize(3) ds.setTestConnectionOnCheckin(true) ds.setIdleConnectionTestPeriod(300) ds.setMaxIdleTimeExcessConnections(240) ds.setAcquireIncrement(1) ds.setJdbcUrl("jdbc:jtds:sqlserver://localhost:1433/db_test;instance=SQLEXPRESS") ds.setPreferredTestQuery("SELECT 1") private val _database = Database.forDataSource(ds) def database = _database }
您可以如下所示使用它。
DatabaseUtils.database withSession { implicit session => [...] }
上一个C3P0的Maven依赖项和最新的Slick版本。
<dependency> <groupId>com.typesafe.slick</groupId> <artifactId>slick_2.10</artifactId> <version>2.0.0-M3</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c**0</artifactId> <version>0.9.2.1</version> </dependency>
推荐阅读
热点文章
检查拆分键盘
0
带有“上一个"的工具栏和“下一个"用于键盘输入AccessoryView
0
Activity 启动时显示软键盘
0
UIWebView 键盘 - 摆脱“上一个/下一个/完成"酒吧
0
在 iOS7 中边缘滑动时,使键盘与 UIView 同步动画
0
我的 iOS 应用程序中的键盘在 iPhone 6 上太高了.如何在 XCode 中调整键盘的分辨率?
0
android:inputType="textEmailAddress";- '@' 键和 '.com' 键?
0
禁用 iPhone 中键盘的方向
0
Android 2.3 模拟器上的印地语键盘问题
0
keyDown 没有被调用
0