java—当现有名称是保留字时,如何在hsqldb中更改列名?

r7s23pms  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(326)

我正在尝试将我们的数据库从hsqldb1.7升级到最新版本。不幸的是,有人将一列命名为“default”。我似乎无法在sql中重命名此列(这是在1.7中,因为必须在升级之前进行重命名)。
我试过逃出这个纵队:

stmt.executeUpdate("ALTER TABLE table_name ALTER COLUMN \"DEFAULT\" RENAME TO new_name");

各种各样的变化(包括“\”和[]),似乎什么都不起作用,我总是得到下面的结果

java.sql.SQLException: Column not found: DEFAULT in statement [ALTER TABLE table_name ALTER COLUMN "DEFAULT"]

我明显漏掉了什么?

mwecs4sa

mwecs4sa1#

不幸的是,有人将一列命名为“default”
问题似乎出在外壳上。双引号不仅可以“转义”你的名字,还可以区分大小写,不像非引号的名字,在大多数数据库中不区分大小写。因此,在重命名列时必须使用准确的大小写:

ALTER TABLE table_name ALTER COLUMN "Default" RENAME TO new_name

... 或使用jdbc:

stmt.executeUpdate("ALTER TABLE table_name ALTER COLUMN \"Default\" RENAME TO new_name");
uujelgoq

uujelgoq2#

从hsqldb指南:
如果数据库对象被双引号引用,则所有关键字都可用于数据库对象。
所以试着用这个:

ALTER TABLE "table_name" ALTER COLUMN "DEFAULT" RENAME TO "new_name"
ukxgm1gy

ukxgm1gy3#

试着用倒勾(`)。
这应该很好地转义默认字符串。

ALTER TABLE `table_name` ALTER COLUMN `DEFAULT` RENAME TO `new_name`

相关问题