带有 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