jooq多表查询_如何将MySQL JOOQ重命名表查询范围扩展到同一个数据库?

本文讨论了一个使用JOOQ在Scala应用程序中管理MySQL数据库模式时遇到的问题,即在尝试重命名表时,由于连接池连接的是管理数据库而非目标数据库,导致表被重命名并移动到了管理数据库。作者尝试了多种方法,并找到了通过使用纯SQL模板解决此问题的方法:.renameTo(table("`TestDatabase`.`Foo`"))。
摘要由CSDN通过智能技术生成

我有一个scala应用程序来管理多个MySQL数据库模式,其中包括修改(添加,重命名等)表.这些命令通过连接池发出,该连接池连接到数据库服务器中的通用管理数据库.

因为应用程序被设计为跨数据库,所以我使用JOOQ来呈现SQL查询(通过单独的JDBC模块执行).

我遇到了JOOQs的问题alterTable(…).renameTo(…)DSL – 请考虑以下示例:

我们在数据库“TestDatabase”中有一个表“TestTable”.假设我想将该表简单地重命名为“Foo”,将其保存在“TestDatabase”中.

这段代码:

...

val context = DSL.using(SQLDialect.MYSQL_5_7)

val query = context

.alterTable(table(name("TestDatabase", "TestDatabase")))

.renameTo(name("TestDatabase", "Foo"))

...

生成:ALTER TABLE`TestDatabase“TestTable`重命名为`Foo`

但是,由于我正在使用的连接池连接到我的管理数据库,它只是将表重命名为“Foo”并将其移动到我的管理数据库.我原以为SQL应该是:ALTER TABLE`TestDatabase“TestTable`重命名为`TestDatabase“Foo`.我尝试了各种替代方法来调用.renameTo方法并将其设置为使用完全限定名称,但无济于事:

> .renameTo(table(name(…) – >相同的行为.

> .renameTo(“`TestDatabase` .Foo`”) – >使用反引号转义名称,将其视为一个名称而不是限定名称.

我想知道我是否遗漏了某些东西,如果这是预期的行为,或者甚至是JOOQ的错误或设计缺点.

有没有办法使用完全限定名称重命名表?

谢谢!

解决方法:

你的解决方法很接近.这不起作用:

.renameTo("`TestDatabase`.`Foo`")

正如您已经注意到的那样,在幕后,DSL.name()API用于包装目标名称,因为renameTo()方法不实现plain SQL templating API.但是,您可以通过写入明确使用纯SQL模板作为一种解决方法:

.renameTo(table("`TestDatabase`.`Foo`"))

标签:mysql,scala,jooq

来源: https://codeday.me/bug/20190701/1346071.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值