Hsqldb与Slick和Hikaricp

时间:2018-02-21 03:46:29

标签: scala slick hsqldb akka-http

我正在尝试实现HSQLDB而不是Mysql,我的其余部分是通过akka-http实现的服务,具有光滑和Hikari cp的连接池。 早些时候

    class HikariService(jdbcUrl: String,
                    dbUser: String,
                    dbPassword: String,slickProfile:String) extends DriverDataSource{

  private val hikariConfig = new HikariConfig()
  val jdbcurl: String = s"$jdbcUrl/db_name"
  hikariConfig.setJdbcUrl(jdbcurl)
  hikariConfig.setUsername(dbUser)
  hikariConfig.setPassword(dbPassword)



  private val dataSource = new HikariDataSource(hikariConfig)

  val driver = if(slickProfile == "MySQL")
   slick.jdbc.MySQLProfile
  else slick.jdbc.HsqldbProfile

  import driver.api._

  val db = Database.forDataSource(dataSource)

  db.createSession()
}

和hsqldb的jdbc url是jdbc:hsqldb:file:/ Users / abc /

现在我能够看到在abc目录中生成的日志,其中包含.log文件 SET SCHEMA PUBLIC 并且所有表都是使用模式公共创建的。 现在,当我使用光滑查询它时会抛出错误

处理请求时出错:

'user lacks privilege or object not found: table_name in statement [select "id", "name", "type", "configuration", "description" from "table_name" ]

我的光滑连接看起来像

trait EntityTable {

  protected val hikariService: HikariService

  import hikariService.driver.api._
  protected val enricher = TableQuery[Table_name]

  class Enricher(tag: Tag) extends Table[EnricherEntity](tag, "table_name") {
    def * = (id, name, `type`, description, configuration) <> ((EnricherEntity.apply _).tupled, EnricherEntity.unapply)

    def id = column[Option[Long]]("id", O.PrimaryKey, O.AutoInc)

    def name = column[String]("name")

    def `type` = column[String]("type")

    def description = column[Option[String]]("description")

    def configuration = column[String]("configuration")
  }
}

执行此操作的正确方法是什么

1 个答案:

答案 0 :(得分:0)

您的CREATE TABLE在名为“db_name”的模式中创建表。但是您的SELECT语句不引用模式。在这种情况下,当前的默认模式(称为PUBLIC)用于SELECT语句。由于PUBLIC架构中没有此类表,因此会返回错误。

您可以使用4种不同的方法。

  1. 在创建表之前将PUBLIC架构重命名为“db_name”。
  2. 将用户的默认架构更改为“db_name”
  3. 将连接的当前架构设置为“db_name”
  4. 使用“PUBLIC”架构名称而不是“db_name”