带有 Slick 和 Hikaricp 的 Hsqldb

Posted

技术标签:

【中文标题】带有 Slick 和 Hikaricp 的 Hsqldb【英文标题】:Hsqldb with Slick and Hikaricp 【发布时间】:2018-02-21 03:46:28 【问题描述】:

我正在尝试实现 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 并且所有表都是使用公共模式创建的。 现在,当我使用 slick 进行查询时,它会抛出错误

处理请求时出错:

'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")
  

这样做的正确方法是什么

【问题讨论】:

数据库名真的是db_name,表名真的是table_name吗?看起来您在这里缺少一些字符串插值^^ 请在该表的 .log 文件中报告 CREATE TABLE ... 语句。 CREATE MEMORY TABLE "db_name"."table_name"("version_rank" INTEGER NOT NULL,"installed_rank" INTEGER NOT NULL,"version" VARCHAR(50) NOT NULL,"description" VARCHAR(200) NOT NULL,"type" VARCHAR(20) NOT NULL,"script" VARCHAR(1000) NOT NULL,"checksum" INTEGER,"installed_by" VARCHAR(100) NOT NULL,"installed_on" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,"execution_time" INTEGER NOT NULL,"success" BIT(1) NOT NULL,CONSTRAINT "schema_version_pk" PRIMARY KEY("version")) @C4stor 我已将 db_name 和 table_name 分别作为数据库和表的引用名称 【参考方案1】:

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

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

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

【讨论】:

以上是关于带有 Slick 和 Hikaricp 的 Hsqldb的主要内容,如果未能解决你的问题,请参考以下文章

Play Framework 2.5.x 中的 HikariCP 警告消息

将 Slick 轮播水平箭头更改为带有字体真棒箭头的向上和向下箭头

如何在 ngx-slick-carousel 中添加带有内容而不是图像的 div

带有样式组件的 React-slick 自定义箭头

如何使用 Hibernate 和 Spring Boot 配置和监控 HikariCP

带有可选图像列的 Scala Slick 模型