我有以下环境scala2.11.8 / akka 2.4.8 / slick 3.1.1 / postgreSQL 9.6
我在application.conf
中完成了以下配置mydb {
driver = "slick.driver.PostgresDriver$"
db {
url = "jdbc:postgresql://localhost:5432/mydb"
driver = org.postgresql.Driver
user="postgres"
password="postgres"
numThreads = 10
connectionPool = disabled
keepAliveConnection = true
}
}
数据库访问在类
中完成package mib
import slick.driver.PostgresDriver.api._
import scala.concurrent.ExecutionContext.Implicits.global
class DBAccess {
import scala.concurrent.Future
import scala.concurrent._
import scala.concurrent.duration._
import slick.backend.DatabaseConfig
import slick.driver.JdbcProfile
import slick.driver.PostgresDriver
import slick.driver.PostgresDriver.api._
import slick.jdbc.JdbcBackend.Database
println("creating database")
val dbConfig: DatabaseConfig[PostgresDriver] = DatabaseConfig.forConfig("mydb")
val db = dbConfig.db
try{
val accesspoints = TableQuery[mibPoint]
// SELECT * FROM users WHERE username='john'
val q = for (a <- accesspoints) yield a.mib_id
val dbAction = q.result
val f: Future[Seq[String]] = db.run(dbAction)
Await.result(f, Duration.Inf)
f.onSuccess { case s => println(s"Result: $s") }
}
catch
{
case _: Throwable =>println("got some exception")
}
finally
db.close
}
// this is a class that represents the table I've created in the database
class mibPoint(tag: Tag) extends Table[(String, Double,Double)](tag, "mib_non_info") {
def mac_id = column[String]("mib_id",O.PrimaryKey)
def lat = column[Double]("lat")
def lng = column[Double]("lng")
def * = (mib_id, lat,lng)
}
此类从APP对象调用为
object wmib extends App {
val mWBootStrapper = new bootStrap
mWBootStrapper.ReadProperties();
val mdB = new DBAccess
}
然而,在跑步之后,我总是得到输出&#34;得到一些例外&#34; 我曾尝试使用slf4j / logback启用日志记录但仍然没有在日志中看到太多。 上面看起来非常微不足道,可能我错过了一些明显的东西。 提前致谢, 维沙尔
我添加了sarvesh建议的异常处理。那太酷了,谢谢你。 然而,我的问题消失了,也没有例外。 发生了什么? 当天早些时候,我曾尝试使用java JDBC方式访问数据库。 即只是为了检查DB和DB访问是否有任何问题。 在这个过程中,我下载并在类路径中添加了postgresDriver。早些时候并非如此。 由于驱动程序现在在路径中,代码才起作用。 由于我没有打印异常,我没有意识到错误。 然后我删除了驱动程序jar,我收到了以下错误。
01:44:08.224 [mydb.db-1] DEBUG slick.jdbc.JdbcBackend.statement - Preparing statement: select "mib_id" from "mibpoint"
01:44:08.224 [mydb.db-1] DEBUG slick.jdbc.DriverDataSource - Driver org.postgresql.Driver not already registered; trying to load it
java.lang.ClassNotFoundException: org.postgresql.Driver
at java.lang.ClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at slick.util.ClassLoaderUtil$$anon$1.loadClass(ClassLoaderUtil.scala:12)
at slick.jdbc.DriverDataSource$$anonfun$init$2.apply(DriverDataSource.scala:60)
at slick.jdbc.DriverDataSource$$anonfun$init$2.apply(DriverDataSource.scala:58)
at scala.Option.getOrElse(Option.scala:121)
感谢大家的帮助。 维沙尔
答案 0 :(得分:3)
首次使用Slick时遇到了相同的连接问题。我提交了这个PR,详细介绍了如何连接本地Postgres服务器。
https://github.com/slick/slick/issues/1861#issuecomment-387616310
但基本上尝试编辑build.sbt和application.conf文件:
答案 1 :(得分:0)
我添加了sarvesh建议的异常处理。那太酷了,谢谢你。然而,我的问题消失了,也没有例外。发生了什么?当天早些时候,我曾尝试使用java JDBC方式访问数据库。即只是为了检查DB和DB访问是否有任何问题。在这个过程中,我下载并在类路径中添加了postgresDriver。早些时候并非如此。由于驱动程序现在在路径中,代码才起作用。由于我没有打印异常,我没有意识到错误。然后我删除了驱动程序jar,我收到了以下错误。
clang -E -std=c99 test.c
感谢大家的帮助。维沙尔
答案 2 :(得分:0)
mydb {
dataSourceClass = "slick.jdbc.DatabaseUrlDataSource"
properties = {
driver = "slick.driver.PostgresDriver$"
url = "postgres://postgresql:postgresql@localhost:5432/mydb"
}
}
或者..你可以尝试类似的东西,
mydb = {
dataSourceClass = "org.postgresql.ds.PGSimpleDataSource"
properties = {
url = "jdbc:postgresql://localhost:5432/mydb"
user = "postgres"
password = "postgres"
}
numThreads = 10
}
答案 3 :(得分:0)
你需要在类路径上使用Postgres驱动程序:
尝试将"org.postgresql" % "postgresql" % "42.1.4"
添加到您的libraryDependencies。
答案 4 :(得分:0)
2020年答案:
您必须确保两件事:
build.sbt
的{{1}}:libraryDependencies
中。这将导致"org.postgresql" % "postgresql" % "42.2.5"
的方法java.sql.DriverManager
(类getDrivers
中的slick使用该方法)找到驱动程序DriverDataSource
org.postgresql.Driver
中的数据库URL遵循JDBC的完整URL模式,如源代码https://github.com/slick/slick/blob/42d787b4950fe876569b5fd68e98c4e0379ac83c/slick/src/main/scala/slick/jdbc/DatabaseUrlDataSource.scala#L9中所述。例如:application.conf
。我的完整配置是:
build.sbt
postgresql://user:password@localhost:5432/postgres
application.conf
libraryDependencies ++= Seq(
...,
"org.postgresql" % "postgresql" % "42.2.5"
)