连接到Slick中的SQLite数据库';不工作但不工作';不要出错

连接到Slick中的SQLite数据库';不工作但不工作';不要出错,sqlite,scala,slick,Sqlite,Scala,Slick,因此,Typesafe的Slick的文档非常薄,其示例仅供使用,这对在Eclipse中工作没有多大帮助 我尝试连接到系统上现有的SQLite数据库,该数据库由一个表“Maintenance\u Request”组成 但是启动程序并没有给我任何结果。另外,如果我更改了路径,比如省略了一个字符,那么它不是有效的路径,不会抛出错误!所以我不知道什么在起作用,什么不起作用 有没有办法知道变量db是否连接到数据库? 知道Database.forURL是否工作或失败的任何方法???我怀疑您没有看到结果的原因

因此,Typesafe的Slick的文档非常薄,其示例仅供使用,这对在Eclipse中工作没有多大帮助

我尝试连接到系统上现有的SQLite数据库,该数据库由一个表“Maintenance\u Request”组成

但是启动程序并没有给我任何结果。另外,如果我更改了路径,比如省略了一个字符,那么它不是有效的路径,不会抛出错误!所以我不知道什么在起作用,什么不起作用

有没有办法知道变量db是否连接到数据库?
知道Database.forURL是否工作或失败的任何方法???

我怀疑您没有看到结果的原因只是您的主程序在查询完成之前已经完成

我的意思是,
db.run(action)
的类型将是
Future[Seq[Int]]
。在不阻塞结果的上调用
foreach
。此处指出了
foreach
Future
上的行为:

重要的是要注意,调用foreach组合器不会阻止遍历值(一旦值可用)。相反,只有在未来成功完成时,foreach的函数才会异步执行。 --

因此,您可以做的是等待结果:

import scala.concurrent.Await
import scala.concurrent.duration._
val result = Await.result(db.run(action), 2 seconds)
result.foreach(println)
…这将确保您在程序终止前看到打印的结果

就连接到数据库的错误而言

  • forUrl
    中,如果连接字符串不是有效的可识别方案,您将看到一个异常,例如
    java.sql.SQLException:No合适的驱动程序
  • 如果您提供了一个有效的URL,但数据库名称错误,这将取决于所讨论的数据库。对于H2,我怀疑是SQLite,您可能会创建一个新的空数据库。您可以在JDBCURL中传递一些参数来控制这种行为,但这些参数是特定于驱动程序/数据库的
我怀疑您没有看到结果的原因是您的主程序在查询完成之前就已经完成了

我的意思是,
db.run(action)
的类型将是
Future[Seq[Int]]
。在不阻塞结果的上调用
foreach
。此处指出了
foreach
Future
上的行为:

重要的是要注意,调用foreach组合器不会阻止遍历值(一旦值可用)。相反,只有在未来成功完成时,foreach的函数才会异步执行。 --

因此,您可以做的是等待结果:

import scala.concurrent.Await
import scala.concurrent.duration._
val result = Await.result(db.run(action), 2 seconds)
result.foreach(println)
…这将确保您在程序终止前看到打印的结果

就连接到数据库的错误而言

  • forUrl
    中,如果连接字符串不是有效的可识别方案,您将看到一个异常,例如
    java.sql.SQLException:No合适的驱动程序
  • 如果您提供了一个有效的URL,但数据库名称错误,这将取决于所讨论的数据库。对于H2,我怀疑是SQLite,您可能会创建一个新的空数据库。您可以在JDBCURL中传递一些参数来控制这种行为,但这些参数是特定于驱动程序/数据库的
此代码是否已执行?你试过添加一些
println
语句吗?是的,我试过了,我把它们从文章的代码中去掉了,但是如果我在代码末尾添加println,它就是printed这个代码执行了吗?你试过添加一些
println
语句吗?是的,我添加了,我从文章的代码中删除了它们,但是如果我在代码末尾添加println,它就会被打印出来